You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras中Conv2D设置padding=SAME后输出尺寸仍缩小问题咨询

问题原因分析

你对tf.keras.layers.Conv2D中padding="SAME"的作用存在认知偏差,该参数的定义不是所有场景下都保持输入输出特征图尺寸一致:

  • 仅当卷积步长strides=(1,1)时,padding="SAME"才会通过补零让输出特征图的高宽和输入完全相等
  • 当步长大于1时,padding="SAME"的作用仅为补零保证边缘像素可以被卷积核覆盖,输出特征图的高宽仍然会按照步长比例缩小

TensorFlow官方定义的SAME模式下输出高宽计算公式为:

输出尺寸 = ceil(输入尺寸 / 步长)

你的代码中步长设置为(2,2),代入计算:

  1. 第一层输入尺寸120,输出为ceil(120/2) = 60
  2. 第二层输入尺寸60,输出为ceil(60/2) =30
    和你实际运行得到的结果完全吻合,属于正常运行结果。
调整方案

如果你需要输出特征图尺寸和输入完全一致,可按需求选择以下配置:

  • 不需要下采样场景:将两个Conv2D层的strides参数改为(1,1),搭配padding="SAME"即可保持输出高宽为120x120
    修改后的测试代码示例:
import tensorflow as tf

x = tf.keras.Input([120, 120, 3])
# 步长改为1
conv = tf.keras.layers.Conv2D(filters=3, kernel_size=(3, 3), strides=(1, 1), padding="SAME")(x)
conv = tf.keras.layers.Conv2D(filters=3, kernel_size=(3, 3), strides=(1, 1), padding="SAME")(conv)

model = tf.keras.Model(inputs=[x], outputs=[conv])
model.summary()
  • 需要下采样后恢复原尺寸场景:在网络后端搭配Conv2DTranspose转置卷积、或UpSampling2D上采样层,即可恢复到输入尺寸。

内容的提问来源于stack exchange,提问作者TeeTracker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:24:06