【问题标题】:calculating the output shape for 3D CNN计算 3D CNN 的输出形状
【发布时间】:2019-03-11 13:03:07
【问题描述】:

如何计算以下 CNN 和最大池化层的形状? (用keras写的)

model.add(Conv3D(128, (3, 3, 3), activation = "relu"))
model.add(MaxPooling3D((2, 2, 2)))
model.add(Conv3D(128, (3, 3, 3), activation = "relu"))
model.add(MaxPooling3D((2, 2, 2)))

谢谢! 编辑:输入形状为 39x100x100。

【问题讨论】:

    标签: keras neural-network conv-neural-network


    【解决方案1】:

    如果不知道确切的输入尺寸,就不可能知道确切的输出。但是可以根据输入维度来计算输出维度。 formula is the same as for 2D conv

    Out = (W−F+2P)/S+1
    

    其中W 是输入卷大小,F 是内核大小,S 是步幅,P 是填充。由于您没有定义步幅或填充,默认情况下它们等于S=1P="valid"(仅使用必要的值来完成边界,以完成内核大小和输入大小之间可能的不匹配),从而简化等式到:

    Out = W - F + 1  
    

    因此,考虑XYZ 作为您的输入维度:

    new_X = X - 3 + 1
    new_Y = Y - 3 + 1
    new_Z = Z - 3 + 1
    

    然后新的输出将是(new_X, new_Y, new_Z, 128)。最后一个128 是因为您的过滤器数量。在轮询层之后,它遵循卷积的相同公式。由于您没有定义步幅,因此它只会在每个维度上减少一个单位:

    polled_X = new_X - 2 + 1
    polled_Y = new_Y - 2 + 1
    polled_Z = new_Z - 2 + 1
    

    要得到最终的输入,只需重复以上操作即可得到如下的最终输出:

    final_X = ((((X - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = X - 6
    final_Y = ((((Y - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = Y - 6
    final_Z = ((((Z - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = Z - 6
    

    请记住,轮询层不影响堆叠过滤器的维度,因此您最终的输出将是(X - 6, Y - 6, Z - 6, 128)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2020-12-10
      • 2020-12-18
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      相关资源
      最近更新 更多