Maxpooling Layer会导致Keras出错

时间:2017-10-01 19:49:52

标签: python-3.x keras

我在Keras创建了一个CNN,其中包含12个卷积层,然后是BatchNormalization,Activation和MaxPooling。该图层的示例是:

ggplot

我从32个特征映射开始,以512结尾。如果我在每个Conv Layer之后添加MaxPooling,就像上面的代码一样,我在最后一层出现错误:

  

ValueError:通过从< max_pooling2d_11 / MaxPool' max_pooling2d_11 / MaxPool'中减去2而导致的负尺寸大小(op:' MaxPool')输入形状:[?,1,1,512]。

如果我在任何图层中省略一个MaxPooling,模型将编译并开始训练。我使用Tensorflow作为后端,我在第一层中具有正确的图像输入形状。

有什么建议可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

如果您的空间尺寸为256x256,那么您的网络中不能有超过8个Max-Pooling图层。当2 ** 8 == 256时,在下采样两倍,八次之后,您的要素图在空间维度上将是1x1,这意味着您无法执行最大池化,因为您将获得0x0或负维度。

它只是Max Pooling的一个明显限制,但并不总是在论文中讨论过。

答案 1 :(得分:0)

这也可能是由于您输入的图像格式错误导致的 如果您使用的是(3,X,Y)并且期望为(X,Y,3),则向下采样会在颜色通道上发生并引起问题。