不同输入与卷积核维度下TensorFlow的Conv2d工作原理是怎样的?
TensorFlow Conv2D运算逻辑解答
结论
你的理解完全正确,该场景下最终输出的shape确实为[1, 11, 11, 20]。
具体运算逻辑拆解
基础维度定义
你示例中的参数符合标准2D卷积的配置要求:
- 输入shape
[1, 13, 13, 10]对应TensorFlow默认channels_last格式的四个维度:[批量大小, 输入高度, 输入宽度, 输入通道数] - 你描述的卷积核对应20个尺寸为3×3、通道数和输入通道数对齐(10)的卷积核,符合常规卷积的参数设置。
单卷积核计算过程
每个卷积核独立执行如下运算:
- 步长为默认的
(1,1)、无padding的规则下,卷积核在输入的高度、宽度维度滑动,每次截取输入上3×3×10的局部感受野区域 - 卷积核和该局部区域做逐元素相乘后求和(即你提到的点积运算),得到1个标量值,对应输出特征图上的1个像素点
- 无padding时输出特征图的高/宽计算公式为:
输入尺寸 - 卷积核尺寸 + 1,代入数值就是13 - 3 + 1 = 11,因此单个卷积核输出的特征图尺寸为11×11。
多卷积核拼接逻辑
20个卷积核各自独立完成上述计算,每个输出1张11×11的特征图,最终所有特征图在通道维度拼接,加上最前面的批量维度1,最终输出shape就是[1, 11, 11, 20]。
代码验证
你可以直接运行下方TensorFlow代码验证结果:
import tensorflow as tf # 构造和你示例一致的输入 input_tensor = tf.random.normal(shape=(1, 13, 13, 10)) # 定义20个3×3卷积核、无padding的Conv2D层 conv2d_layer = tf.keras.layers.Conv2D(filters=20, kernel_size=3, padding="valid") output_tensor = conv2d_layer(input_tensor) print(output_tensor.shape) # 运行输出为:TensorShape([1, 11, 11, 20])
补充说明
如果你提到的卷积核shape[20, 3, 3, 10]是显式的维度存储顺序,仅需对应调整TensorFlow的data_format参数为通道优先模式即可,核心计算逻辑和最终输出的数值结果完全一致,不会影响你对卷积运算逻辑的理解。
内容的提问来源于stack exchange,提问作者김민성
相关产品推荐
相关产品推荐

