python - Keras 功能 API:池化输入未提供正确的输出形状
问题描述
我正在使用 Tensorflow 学习 Keras,我构建了一个非常简单的模型,它采用大小的输入图像224x224x3
并应用MaxPooling
,将其展平为一维向量,这个一维向量是输出。
请注意,此模型仅用于教程目的。但是,当我看到模型的摘要时,即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
_________________________________________________________________
您会注意到池化层的输出与输入的大小相同。这可能是什么原因造成的?
解决方案
这是一个愚蠢的错误。结果取决于池化层使用的填充类型。下面给出正确的结果。
pool = MaxPooling2D(pool_size=4, strides=1, padding='valid')(in_feats)
您可以在此处阅读有关填充的更多信息
推荐阅读
- flutter - TabBarview 中的 Gridview 可移动 sliver 应用栏
- for-loop - 如何重复命令代码中的数字?
- python - InsecureRequestWarning:正在发出未经验证的 HTTPS 请求 - 在构建 docker 映像以使用 PIP 安装请求组件时
- python-3.x - 我的 Hangman 游戏中的 while 循环不起作用
- angular - 延迟渲染路由器出口
- javascript - 如何在 vuejs 组件中存储 chrome 身份 api 响应
- javascript - 排序算法可视化
- asp.net - 在服务器上缓存完整响应
- python - 如何使用 Django REST 框架访问反向关系
- c - 为什么 Visual Studio 2017 Developer Command Promt 只能在管理员模式下打开“stdio.h”?