【问题标题】:How to specify padding with keras in Conv2D layer?如何在 Conv2D 层中使用 keras 指定填充?
【发布时间】:2019-09-05 18:18:05
【问题描述】:

我正在尝试使用 Keras 实现 AlexNet,并正在检查 MATLAB 中的网络设计,如下所示

可以看出,第二个卷积层有 256 个大小为 5x5 的过滤器、48 个通道和 [2 2 2 2] 的填充。如何使用 Keras 指定 [2 2 2 2] 的 padding?我通过了documentation of Conv2D。它只接受两个填充值,即validsame。我无法理解这一点。据我所知,valid 意味着零填充。如何使用第二个卷积层指定 [2 2 2 2] 填充?我将第一层创建为:

model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), 
 strides = (4,4), padding = "valid", input_shape=(227,227,3)))

另外,由于第二层有 48 个通道,我需要明确说明吗?

【问题讨论】:

    标签: python tensorflow keras computer-vision conv-neural-network


    【解决方案1】:

    Conv2D 中没有指定特定的填充,而是在ZeroPadding2D 层中指定。

    validsame 实际上只是常用填充的简写 - valid 表示您不填充输入,same 表示您添加填充以使输出长度与输入长度相同.

    如果您想添加大小为 2 的特定填充:

    model.add(keras.layers.ZeroPadding2D(padding=(2, 2)))
    model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), strides = (4,4), padding = "valid"))
    

    我还强烈建议您查看此keras implementation of alexnet。请注意,您还可以在 the keras convolutional docs 中找到用于填充层的文档(一直在底部)。

    【讨论】:

    • 用 2 2 2 2 填充然后在 Conv2D 中使用 padding=same 到底是什么意思?
    • @SuhailGupta 同样会给你更多的填充,每次你通过一个卷积层你的输出会变小,除非你填充。如果你用 2 2 2 2 填充,你的输入会变大。然后它被传递到你的 conv 层,然后以我上面描述的方式相同/有效地影响它。
    • @SuhailGupta 你的 (2 2 2 2) 应该对应 ((top_pad, bottom_pad), (left_pad, right_pad)),和ZeroPadding2D(padding=(2, 2))一样。
    • 不加[2 2 2 2] padding直接使用same会有什么不同?
    • @SzymonMaszke 哦,你是对的,那是我的错,但其他一切都正常
    【解决方案2】:

    valid 填充正确,请注意使用此参数层后宽度和高度会更小。

    另一方面,填充 same 意味着将使用特定的填充大小来确保图像尺寸不会发生变化。

    对于您的特定情况,如果您在输入图像的每一侧填充2 像素,您将获得与图层输出完全相同大小的图像。所以指定same 将执行与[2 2 2 2] 完全相同的填充。

    如果你想要计算卷积层后输出大小的公式check first answer to this Quora question

    我很少(如果有的话)见过不同的填充方案,所以这些通常就足够了。

    顺便说一句。 AlexNet 中的所有层都使用填充 same,除了第一个(如 cmets 中正确指出的另一个答案)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2021-02-15
      • 2023-02-06
      • 2018-05-12
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多