Conv2D 中的填充给出了错误的结果?

Padding in Conv2D gives wrong result?

我正在使用 Keras 的 Conv2D 方法。在 documentation 中写着

padding: one of "valid" or "same" (case-insensitive). Note that "same" is slightly inconsistent across backends with strides != 1, as described here

作为输入,我有大小为 (64,80,1) 的图像,并且我使用的是大小为 3x3 的内核。这是否意味着使用 Conv2D(32, 3, strides=2, padding='same')(input) 时填充错误?

如何使用 ZeroPadding2D 修复它?

根据您的评论并看到您定义的步幅为 2,我相信您想要实现的输出大小恰好是输入大小的一半,即 output_shape == (32, 40, 32)(第二个 32 是功能)。

在那种情况下,只需在最终模型上调用 model.summary(),您就会看到是否是这种情况。

如果是,就没有别的事可做了。 如果它比你想要的大,你可以添加一个 Cropping2D 层来从图像的边界上切掉像素。 如果它比您想要的要小,您可以添加一个 ZeroPadding2D 层以将零像素添加到图像的边界。

创建这些图层的语法是

Cropping2D(cropping=((a, b), (c, d)))
ZeroPadding2D(padding=((a, b), (c, d)))
  • a:您要 add/cut 关闭 to/from 顶部的行数
  • b: 您要 add/cut 关闭 to/from 底部的行数
  • c:要add/cut关闭to/from左边的列数
  • d:要add/cut关闭to/from右边的列数

但是请注意,没有严格的技术要求始终将每个卷积层的大小完美减半。您的模型可能在没有任何填充或裁剪的情况下运行良好。您将必须对其进行试验才能找出答案。