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

卷积层输出形状为何不随通道数相乘?附PyTorch代码疑问

卷积层输出形状与卷积核尺寸疑问解答

代码片段

# First convolutional layer: input channels = 1, output channels = 32, kernel size = 5x5, padding = 2 (SAME)
self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=5, stride=1, padding=2)
# First pooling layer: max pooling, kernel size = 2x2, stride = 2
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)

# Second convolutional layer: input channels = 32, output channels = 64, kernel size = 5x5, padding = 2 (SAME)
self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, stride=1, padding=2)
# Second pooling layer: max pooling, kernel size = 2x2, stride = 2
self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)

问题解答

1. 第二层卷积输出为什么不是141432*64?

你的理解存在偏差,卷积层不是“每个输入通道单独用卷积核处理后相乘”。对于nn.Conv2d(in_channels=32, out_channels=64):

  • 每个输出通道对应一个覆盖所有输入通道的完整卷积核,而非给每个输入通道分配独立核。
  • 假设第二层输入是池化后的141432特征图,每个输出通道的计算逻辑是:用一个5532的卷积核,与输入对应区域做逐通道点积后求和,最终得到14*14的单通道特征图。
  • 64个输出通道对应64个这样的5532卷积核,所以最终输出是141464,而非141432*64。

2. 为什么卷积核尺寸是5532而不是代码里写的5*5?

代码里的kernel_size=5指的是卷积核在空间维度(高、宽)的尺寸为5x5,而卷积核的通道数必须和输入通道数一致(即32)。完整的卷积核形状为(out_channels, in_channels, kernel_size, kernel_size),对应第二层就是(64, 32, 5, 5),单个输出通道对应的核就是(32,5,5),也就是你听到的5532。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:12:38