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

TensorFlow中相连卷积层的维度如何衔接?

关于TensorFlow卷积层输出形状的疑问解答

我猜你是疑惑为什么第二个卷积层conv2的空间维度(28×28)和conv1完全一致,只有通道数发生了变化对吧?其实核心原因就藏在你设置的参数里——咱们一步步拆解:

首先,你用了padding="same"这个关键参数,它的作用是在卷积运算前,自动给输入特征图的边缘填充适量的零,确保卷积后的输出特征图在高度和宽度上和输入保持一致。

以你用的kernel_size=[5,5]卷积核为例,TensorFlow会计算需要填充的像素数:(卷积核边长-1)//2,也就是(5-1)//2=2。这意味着会在特征图的上下左右各填充2个零像素,这样卷积操作后,输出的高和宽就和输入的28保持不变了。

而filters参数负责控制输出的通道数:conv1用32个滤波器,所以输出32通道;conv2换成64个滤波器,输出通道数就变成64。所以conv2的完整输出形状应该是(28, 28, 64)。

给你整理下代码,更直观:

# 假设input_layer的形状为(28, 28, 输入通道数,比如1)
conv1 = tf.layers.conv2d( 
    inputs=input_layer, 
    filters=32, 
    kernel_size=[5, 5], 
    padding="same", 
    activation=tf.nn.relu
)
# conv1输出形状:(28, 28, 32)

conv2 = tf.layers.conv2d( 
    inputs=conv1, 
    filters=64, 
    kernel_size=[5, 5], 
    padding="same", 
    activation=tf.nn.relu
)
# conv2输出形状:(28, 28, 64)

如果想验证这个逻辑,你可以把padding改成"valid"试试——这时候不会做任何填充,输出的高/宽会变成28 - 5 + 1 = 24,conv2的输出形状就会变成(24, 24, 64),对比一下就能更明白padding的作用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:58:47