2D输入上的Conv1D

时间:2017-03-29 10:46:55

标签: keras keras-layer

有人可以向我解释当keras Conv1D图层被送入2D输入时会发生什么? 如:

model=Sequential()
model.add(Conv1D(input_shape=(9000,2),kernel_size=200,strides=1,filters=20))

改变(9000,1)和(9000,2)之间的输入大小并调用model.summary(),我看到输出形状保持不变,但参数的数量发生了变化。那么,这是否意味着为每个通道训练不同的滤波器,但输出在输出之前在第二维上求和/平均?或者是什么?

2 个答案:

答案 0 :(得分:3)

这是一个视觉插图

kernel_size = (2, )

------------- 
| 1 1 1 1 1 |                <---- kernel dim = kernel_size X 5
| 2 2 2 2 2 |
-------------
  3 3 3 3 3 



--------------------------
| 1 1 1 1 1 1 1 1 1 1 1 1 |  <---- kernel dim = kernel_length X 12
| 2 2 2 2 2 2 2 2 2 2 2 2 |        i.e more params! but after 
--------------------------         you apply say MaxPool1D(pool_size=(2,2))
  3 3 3 3 3 3 3 3 3 3 3 3          in both cases, then layer shapes from here
                                   on out are the same, thus same outputs!

答案 1 :(得分:2)

In the doc你可以读到输入必须是2D。

Conv1D可以看作是一个遍历一系列向量的时间窗口。内核将是2dimensions窗口,与矢量长度一样大(所以输入的第二个维度)并且将与窗口大小一样长......

所以确实你的两个网络具有相同的输出形状是完全正常的......并且参数的数量更高,因为内核由于第二维而大2倍。

我希望这会有所帮助: - )