我目前在Keras中使用一维卷积神经网络对多元时间序列进行分类。特别地,每个实例由9个等长时间序列(每个序列300个点)表示。
据我所读的文献,当在图像上使用二维卷积时,可以得到一个提示,指示网络为了分类而查看哪些部分:例如,您可以使用所谓的类激活映射,例如:
这是我的当前网络架构:
以下是长度为292的时间序列结果:
我该如何给这样的时间序列赋予意义?是否有一种方法可以像CAMs一样突出显示输入?
谢谢!
据我所读的文献,当在图像上使用二维卷积时,可以得到一个提示,指示网络为了分类而查看哪些部分:例如,您可以使用所谓的类激活映射,例如:
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
_________________________________________________________________
目前为止,我已经成功地将网络中的激活函数可视化。例如,以下代码片段打印了第一个激活层(128个中的第1个)中第一个激活函数的结果,给定输入实例:
from keras import models
layer_outputs = [layer.output for layer in model.layers[:2]]
activation_model = models.Model(inputs=model.input, outputs=layer_outputs)
activations = activation_model.predict(X_train_windows[0:1])
first_layer_activation = activations[0]
print(first_layer_activation.shape)
plt.plot(first_layer_activation[0, :, 0])
以下是长度为292的时间序列结果:
https://i.ibb.co/TqK6g9D/Schermata-2019-01-15-alle-10-24-39-2.png
然而,我发现很难直观地解释这个图表。我该如何给这样的时间序列赋予意义?是否有一种方法可以像CAMs一样突出显示输入?
谢谢!