Keras功能API:合并输入无法提供正确的输出形状

时间:2018-10-10 17:27:33

标签: python tensorflow keras deep-learning

我正在使用Tensorflow学习Keras,并构建了一个非常简单的模型,该模型采用大小为224x224x3的输入图像,然后应用MaxPooling,将其展平为1D向量,然后将此1D向量作为输出。

请注意,此模型仅用于指导目的。但是,当我看到模型的摘要,即model.summary()时,池化层的输出与输入的大小相同。

代码:

    in_shape = (224, 224, 3)
    in_feats = Input(shape=in_shape)
    pool = MaxPooling2D(pool_size=4, strides=1, padding='same')(in_feats)
    flat = Flatten(name='flat')(pool)
    model = Model(inputs=in_feats, outputs=flat)
    # print summary
    print (model.summary())

摘要如下:

Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 224, 224, 3)       0         
_________________________________________________________________
pool (MaxPooling2D)          (None, 224, 224, 3)       0         
_________________________________________________________________
flat (Flatten)               (None, 150528)            0         
=================================================================
Total params: 0
Trainable params: 0
Non-trainable params: 0
_________________________________________________________________

您会注意到池化层的输出与输入的大小相同。可能是什么原因造成的?

1 个答案:

答案 0 :(得分:1)

这是一个愚蠢的错误。结果取决于池层使用的填充类型。 以下给出正确的结果。

pool = MaxPooling2D(pool_size=4, strides=1, padding='valid')(in_feats)

您可以了解有关填充here

的更多信息