如何最有效地可视化一维卷积?

2024-04-20 06:05:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用一维卷积神经网络来分类Keras中的多变量时间序列。特别是,每个实例由9个等长时间序列(每个300个点)表示。在

正如我在文献中所读到的,当在图像上使用二维卷积时,为了得到分类,有可能得到一个网络正在寻找的提示:例如,您可以使用所谓的类激活映射,例如:

https://rajpurkar.github.io/mlx/visualizing-cnns/class_activation_maps.png

在给定的多元时间序列中,有没有类似的东西可以用来可视化最“有意义”的切片?在

这是我当前的网络架构:

Input shape: 300 9
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_1 (Conv1D)            (None, 292, 128)          10496     
_________________________________________________________________
batch_normalization_1 (Batch (None, 292, 128)          512       
_________________________________________________________________
activation_1 (Activation)    (None, 292, 128)          0         
_________________________________________________________________
max_pooling1d_1 (MaxPooling1 (None, 58, 128)           0         
_________________________________________________________________
conv1d_2 (Conv1D)            (None, 50, 128)           147584    
_________________________________________________________________
batch_normalization_2 (Batch (None, 50, 128)           512       
_________________________________________________________________
activation_2 (Activation)    (None, 50, 128)           0         
_________________________________________________________________
max_pooling1d_2 (MaxPooling1 (None, 10, 128)           0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 1280)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 300)               384300    
=================================================================
Total params: 543,404
Trainable params: 542,892
Non-trainable params: 512
_________________________________________________________________

现在,我已经成功地将网络中的激活函数可视化。例如,下面的代码片段在给定输入实例的情况下,打印第一激活层中第一个激活函数(第1个大于128个)的结果:

^{pr2}$

其结果是以下时间序列,长度为292:

https://i.ibb.co/TqK6g9D/Schermata-2019-01-15-alle-10-24-39-2.png

然而,我发现很难直观地解释这张图。在

我该如何解释这样一个时间序列? 有没有一种方法可以代替在凸轮轴上突出显示输入?在

谢谢你!在


Tags: 实例https网络nonepng可视化batch时间
1条回答
网友
1楼 · 发布于 2024-04-20 06:05:47

{你可以用^ a1}

基本上,您试图找到使某个类最大化的输入,这会产生一些1D序列(在您的例子中,是由9个元素组成的300个向量组成的序列)。在

然后,您可以分别绘制9个通道中的每个通道,或者将它们叠加在一起,以了解该通道的外观。然后,您需要有领域知识来尝试并理解这意味着什么(如果它有任何意义的话)。如果您想了解某个类的输入是怎样的,这很有用。在

您可以使用激活映射显著性映射)(可以使用链接的相同库进行计算)。如果您想了解信息所在的位置(在空间中),这很有用。在

现在如果不知道数据的性质、域或上下文,就很难再多说什么了。。。在

编辑

好吧,我现在明白你的问题了。也可能值得尝试将此问题视为Multiple Instance Learning

你也可以尝试使用一个带有注意力机制的LSTM。在

相关问题 更多 >