3

我目前正在使用 Keras(自动编码器)开发 CNN 模型。这种类型我的输入是 shape (47,47,3),即具有 3 个(RGB)层的 47x47 图像。

我过去曾与一些 CNN 合作过,但这次我的输入尺寸是素数(47 像素)。我认为这会导致我的实现出现问题,特别是在我的模型中使用MaxPooling2D时。UpSampling2D我注意到最大池化然后上采样时会丢失一些尺寸

使用model.summary()我可以看到,在通过带有内核(即 24 个过滤器和一半形状)的(47,47,3)a 和 MaxPooling 传递我的输入后,我得到的输出形状为.Conv2D(24)(2,2)(24, 24, 24)

现在,如果我尝试通过使用(2,2)内核(形状加倍)进行 UpSampling 来反转它并再次卷积,我会得到一个(48,48,3)整形输出。这比需要的多一排和一列。

对此我认为“没问题,只需选择一个内核大小,在上采样时为您提供所需的 47 像素”,但鉴于 47 是质数,在我看来,没有内核大小可以做到这一点。

有什么方法可以绕过这个不涉及将我的输入尺寸更改为非素数的问题?也许我在我的方法中遗漏了一些东西,或者 Keras 有一些我忽略的功能在这里可以提供帮助。

4

1 回答 1

6

我建议您使用ZeroPadding2DCropping2D。你可以用 s 不对称地填充你的图像,0并在不调整大小的情况下获得均匀的图像大小。这应该解决上采样的问题。此外 - 请记住padding=same在所有卷积层中进行设置。

编辑:

只是为您提供有关如何执行此类操作的示例策略:

  1. 如果在池化之前你的网络大小是奇数 - 零填充它以使其均匀。
  2. 在相应的上采样操作之后,使用裁剪以将您的特征图恢复到原始奇数大小。
于 2017-10-25T20:30:43.413 回答