在Conv2D中填充会产生错误的结果?

时间:2019-07-23 22:00:05

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

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

  

填充:“有效”或“相同”之一(不区分大小写)。请注意,“相同”   在跨步为!= 1的后端之间稍微不一致,因为   描述了here

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

如何使用ZeroPadding2D修复它?

1 个答案:

答案 0 :(得分:1)

根据您的评论,看到您定义的跨度为2,我相信您要实现的输出大小恰好是输入大小的一半,即output_shape == (32, 40, 32)(第二个32是要素)

在这种情况下,只需在最终模型上调用model.summary(),您就会发现情况是否如此。

如果是,则无需执行其他操作。 如果它大于所需的大小,则可以添加一个Cropping2D层以从图像的边界处切除像素。 如果它小于所需的大小,则可以添加一个ZeroPadding2D图层,以将零像素添加到图像的边界。

创建这些图层的语法是

Cropping2D(cropping=((a, b), (c, d)))
ZeroPadding2D(padding=((a, b), (c, d)))
  • a:要添加到顶部/从顶部切掉的行数
  • b:要添加到/从底部切掉的行数
  • c:您要添加到/从左边切掉的列数
  • d:要添加到/从右边切掉的列数

但是请注意,对于每个卷积层,总是没有完美的一半大小的严格技术要求。您的模型可能运行良好,没有任何填充或裁剪。您将不得不对其进行实验才能找到答案。