gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:04:38 25 4
gpt4 key购买 nike

我目前正在使用一维卷积神经网络对 Keras 中的多元时间序列进行分类。具体而言,每个实例由 9 个等长时间序列(每个 300 点)表示。

正如我在文献中读到的那样,在图像上使用 2D 卷积时,可以获得关于网络正在查找的位置的提示以便进行分类:例如,您可以使用所谓的类激活图,例如:

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
_________________________________________________________________

至于现在,我只是成功地可视化了网络中的激活函数。例如,在给定输入实例的情况下,以下代码片段打印第一个激活层中第一个激活函数(1st over 128)的结果:

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

但是,我发现很难直观地解释图表。

如何赋予这样的时间序列意义?有没有一种方法可以像在 CAM 中那样突出显示输入?

谢谢!

最佳答案

你可以使用类似 Keras-Vis Library 的东西

基本上,您会尝试找到最大化某个类的输入,这会产生一些一维序列(在您的例子中是一个包含 9 个元素的 300 个向量的序列)。

然后,您可以分别绘制 9 个 channel 中的每一个或彼此叠加,以了解这件事的外观。然后你需要有领域知识来尝试理解这意味着什么(如果它意味着什么)。 如果您想了解某个类的输入是什么样子,这很有用

您可以对激活图(显着图)执行相同的操作(您可以使用链接的相同库进行计算)。 如果您想了解信息所在的位置(在空间中),这很有用

现在,在不知道数据的性质、领域或上下文的情况下,很难说更多...

编辑:

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

您也可以尝试使用具有注意力机制LSTM

关于python - 如何最有效地可视化一维卷积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54195973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com