我目前正在使用一维卷积神经网络来分类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
然而,我发现很难直观地解释这张图。在
我该如何解释这样一个时间序列? 有没有一种方法可以代替在凸轮轴上突出显示输入?在
谢谢你!在
{你可以用^ a1}
基本上,您试图找到使某个类最大化的输入,这会产生一些1D序列(在您的例子中,是由9个元素组成的300个向量组成的序列)。在
然后,您可以分别绘制9个通道中的每个通道,或者将它们叠加在一起,以了解该通道的外观。然后,您需要有领域知识来尝试并理解这意味着什么(如果它有任何意义的话)。如果您想了解某个类的输入是怎样的,这很有用。在
您可以使用激活映射(显著性映射)(可以使用链接的相同库进行计算)。如果您想了解信息所在的位置(在空间中),这很有用。在
现在如果不知道数据的性质、域或上下文,就很难再多说什么了。。。在
编辑:
好吧,我现在明白你的问题了。也可能值得尝试将此问题视为Multiple Instance Learning
你也可以尝试使用一个带有注意力机制的LSTM。在
相关问题 更多 >
编程相关推荐