【发布时间】:2017-12-18 14:31:31
【问题描述】:
根据 keras 文档 (https://keras.io/layers/convolutional/),Conv1D 输出张量的形状是 (batch_size, new_steps, filters),而输入张量形状是 (batch_size, steps, input_dim)。我不明白这是怎么回事,因为这意味着如果你传递一个长度为 8000 的一维输入,其中 batch_size = 1 和 steps = 1(我听说 steps 意味着你输入中的通道数)那么这个层会有形状为 (1,1,X) 的输出,其中 X 是 Conv 层中的过滤器数量。但是输入维度会发生什么?由于层中的 X 过滤器应用于整个输入维度,因此输出维度中的一个不应该是 8000(或更少,取决于填充),比如 (1,1,8000,X)?我检查了 Conv2D 层的行为方式更有意义,它们的 output_shape 是(样本、过滤器、new_rows、new_cols),其中 new_rows 和 new_cols 将是再次根据填充调整的输入图像的尺寸。如果 Conv2D 层保留其输入尺寸,为什么 Conv1D 层不保留?我这里有什么遗漏吗?
背景信息:
我正在尝试可视化我的 CNN 的 1d 卷积层激活,但我发现的大多数在线工具似乎只适用于 2d 卷积层,所以我决定为它编写自己的代码。我已经很好地理解了它的工作原理是我到目前为止的代码:
# 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)......我昨天花了一整天试图弄清楚为什么会这样,但没有运气,非常感谢任何帮助。
更新:原来我把 input_dimension 的含义误认为是 steps 维度。这主要是因为我使用的架构来自另一组,他们在mathematica 中构建他们的模型,在mathematica 中,Conv1D 层的(X,Y) 输入形状意味着X“通道”(或X 的input_dimension)和Y 步。感谢 gionni 帮助我实现这一点并很好地解释了“input_dimension”如何成为“filter”维度。
【问题讨论】:
标签: python keras conv-neural-network tensor