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右边的列数
但是请注意,没有严格的技术要求始终将每个卷积层的大小完美减半。您的模型可能在没有任何填充或裁剪的情况下运行良好。您将必须对其进行试验才能找出答案。
我正在使用 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右边的列数
但是请注意,没有严格的技术要求始终将每个卷积层的大小完美减半。您的模型可能在没有任何填充或裁剪的情况下运行良好。您将必须对其进行试验才能找出答案。