根据keras文档(https://keras.io/layers/convolutional/),Conv1D输出张量的形状为(batch_size, new_steps, filters),而输入张量的形状为(batch_size, steps, input_dim)。我不明白这是怎么回事,因为这意味着如果您传递一个长度为8000的1D输入,其中batch_size = 1并且steps = 1(我听说steps表示输入中的通道数),那么这个层将具有形状为(1,1,X)的输出,其中X是Conv层中的滤波器数量。但是输入维度怎么办?由于层中的X滤波器应用于整个输入维度,因此一个输出维度不应该是8000(根据填充的情况可能会更少),类似于(1,1,8000,X)这样的形状吗?我检查了一下,Conv2D层的行为更合理,它们的output_shape是(samples,filters,new_rows,new_cols),其中new_rows和new_cols是根据填充调整后的输入图像的尺寸。如果Conv2D层保留其输入维度,为什么Conv1D层不保留?我有什么遗漏吗?
这段代码基于julienr在thread中的第一条评论,针对当前版本的keras进行了一些修改。然而,当我使用它时,所有激活数组的形状都是(1,1,X)...我昨天花了一整天的时间试图弄清楚为什么,但没有成功,非常感谢任何帮助。
更新:事实证明我误解了输入维度和步数维度的含义。这主要是因为我使用的架构来自另一个团队,他们在mathematica中构建了他们的模型,在mathematica中,将(X,Y)的输入形状传递给Conv1D层意味着X个“通道”(或X的输入维度)和Y个步骤。感谢gionni帮助我认识到这一点,并很好地解释了“输入维度”如何变成“过滤器”维度。
我想要可视化我的CNN的一维卷积层激活结果,但我找到的大多数在线工具似乎只适用于二维卷积层,因此我决定自己编写代码。我对其如何工作有很好的理解,这是我目前的代码:
# all the model's activation layer output tensors
activation_output_tensors = [layer.output for layer in model.layers if type(layer) is keras.layers.Activation]
# make a function that computes activation layer outputs
activation_comp_function = K.function([model.input, K.learning_phase()], activation_output_tensors)
# 0 means learning phase = False (i.e. the model isn't learning right now)
activation_arrays = activation_comp_function([training_data[0,:-1], 0])
这段代码基于julienr在thread中的第一条评论,针对当前版本的keras进行了一些修改。然而,当我使用它时,所有激活数组的形状都是(1,1,X)...我昨天花了一整天的时间试图弄清楚为什么,但没有成功,非常感谢任何帮助。
更新:事实证明我误解了输入维度和步数维度的含义。这主要是因为我使用的架构来自另一个团队,他们在mathematica中构建了他们的模型,在mathematica中,将(X,Y)的输入形状传递给Conv1D层意味着X个“通道”(或X的输入维度)和Y个步骤。感谢gionni帮助我认识到这一点,并很好地解释了“输入维度”如何变成“过滤器”维度。