我目前正在使用Keras(自动编码器)开发CNN模型。此类型我的输入形状为(47,47,3)
,即47x47图像,其中包含3个(RGB)图层。
我过去曾与一些CNN合作过,但这次我的输入尺寸是素数(47像素)。我认为这会导致我的实施出现问题,特别是在我的模型中使用MaxPooling2D
和UpSampling2D
时。我注意到在最大合并然后上采样时会丢失一些尺寸。
使用model.summary()
我可以通过(47,47,3)
和MaxPooling传递 Conv2D(24)
输入并使用(2,2)
内核(即24过滤器和一半的形状)我得到 (24, 24, 24)
的输出形状。
现在,如果我试图通过UpSampling使用(2,2)
内核(形状的两倍)来反转它并再次卷积,我会得到一个 (48,48,3)
形状的输出。这是一个比需要的更多的行和列。
对此我认为"没问题,只需选择一个内核大小,在上采样时为您提供所需的47像素" ,但鉴于47是素数,它似乎对我而言,没有内核大小可以做到这一点。
有没有办法绕过这个不涉及将我的输入维度更改为非素数的问题?也许我在我的方法中遗漏了一些东西或者Keras有一些我忽略的功能可能在这里帮忙。
答案 0 :(得分:3)
我建议您使用ZeroPadding2D和Cropping2D。您可以使用0
非对称地填充图像,并获得图像的均匀尺寸,而无需调整图像大小。这应该解决上采样的问题。此外 - 请记住在所有卷积层中设置padding=same
。
修改强>
只是为您提供有关如何执行此类操作的示例策略: