【发布时间】:2018-04-06 21:39:38
【问题描述】:
我目前正在使用 Keras(一种自动编码器)开发 CNN 模型。这种类型的输入是(47,47,3) 的形状,即具有 3 (RGB) 层的 47x47 图像。
我过去曾与一些 CNN 合作过,但这次我的输入尺寸是素数(47 像素)。我认为这会导致我的实现出现问题,特别是在我的模型中使用 MaxPooling2D 和 UpSampling2D 时。我注意到在最大池化然后上采样时会丢失一些维度。
使用model.summary() 我可以看到,通过Conv2D(24) 和带有(2,2) 内核(即24 个过滤器和一半形状)的MaxPooling 传递我的(47,47,3) 输入后,我得到了(24, 24, 24) 的输出形状。
现在,如果我尝试通过使用 (2,2) 内核(形状加倍)的 UpSampling 来反转它并再次进行卷积,我会得到一个 (48,48,3) 形状的输出。这比需要的多出一行和一列。
对此我认为“没问题,只需选择一个内核大小,在上采样时为您提供所需的 47 像素”,但鉴于 47 是质数,在我看来有没有内核大小可以做到这一点。
有什么方法可以绕过这个不涉及将输入维度更改为非素数的问题?也许我在我的方法中遗漏了一些东西,或者 Keras 有一些我忽略的功能可能在这里帮忙。
【问题讨论】:
标签: python keras conv-neural-network autoencoder max-pooling