【问题标题】:Conv1D on 2D input2D 输入上的 Conv1D
【发布时间】:2017-08-22 19:32:14
【问题描述】:

有人可以向我解释当 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(),我看到输出形状保持不变,但参数数量发生了变化。那么,这是否意味着为每个通道训练不同的过滤器,但输出在输出之前在第二维上求和/平均?还是什么?

【问题讨论】:

    标签: keras keras-layer


    【解决方案1】:

    这是一个视觉插图

    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!
    

    【讨论】:

    • 您是否正确理解“时间轴”在您的可视化中指向下方?
    【解决方案2】:

    In the doc 你可以读到输入必须是二维的。

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

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

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

    【讨论】:

    • 那么,我们应该认为“一维”不是指过滤器形状,而是过滤器“运动”?
    • 是的,确实是卷积的维度,而不是滤波器的大小
    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多