python - 为什么 keras ResNet50 的第一个 maxpooling = 55x55 在论文中是 56x56?
问题描述
我正在尝试使用来自 keras.application.resnet50 的预训练 ResNet50 作为我的 U-Net 的编码器。我使用输入形状 224x224x3(与ResNet 论文第 4 页中所述相同),但我的第一个残差块的输出是 55 x 55 x #_filters。
在纸上,输出大小应为 56 x 56 x #_filters。这对我很重要,因为我使用从编码器到解码器的跳过连接,如下图所示。
使用 ResNet50 作为编码器的 U-Net
来自编码器的特征图与解码器中的特征图连接。解码器具有 56x56 特征图(从 28 x 28 上采样)。如果编码器有 55 x 55 的特征图,我无法进行此跳过连接。
python中的示例代码:
from keras.applications.resnet50 import ResNet50,preprocess_input
R50 = ResNet50(include_top = False, input_shape = (224, 224, 3))
R50.layers.pop() # to remove the last pooling layer
R50.summary()
输出:
R50 摘要输出
任何帮助表示赞赏。谢谢!
解决方案
我查看了源代码和第一个 maxpooling:
x = MaxPooling2D((3, 3), strides=(2, 2))(x)
当输入为 224 时,不可能产生大小为 56x56 的输出。我认为正确的 maxpooing 函数很可能应该是
x = MaxPooling2D(3, 2, padding = 'same')(x)
我不是 100% 确定,但我认为这现在应该可行。如果您不这么认为,请告诉我。谢谢你。
推荐阅读
- ios - SwiftUI 文本字段文本颜色问题
- javascript - javascript 上的二进制搜索
- c - 发送日期和时间作为 TCP 服务器欢迎消息
- javascript - 对现有请求提出请求
- javascript - 在对象数组中创建具有相同键平均值的新数组
- sql - 在 Oracle PL SQL 中的 CONNECT_BY_ROOT 之后显示直接父级
- python - 将点分隔字符串转换为 json Python
- css - Bootstrap 4 在 div 上使用粘性和浮动
- javascript - 在我的服务器代码中使用“setHeader”设置内容安全策略失败?
- reactjs - 使用受保护的路由时反应 js this.props.match.params 为空