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

关于PyTorch中nn.Conv2d内部运行机制及参数细节的技术问询

理解PyTorch中nn.Conv2d的运行机制(针对你的32×32 RGB图像例子)

我来逐个拆解你的问题,结合你给出的torch.nn.Conv2d(3, 49, 4, bias=True)这个具体场景来解释:

问题1:初始化时权重和偏置的数量与形状

对于这个卷积层:

  • 权重:
    形状为(out_channels, in_channels, kernel_size, kernel_size),也就是(49, 3, 4, 4)。
    总参数数量是49 * 3 * 4 * 4 = 2352个。这个形状的含义是:每个输出通道对应一个3×4×4的卷积核(覆盖输入的3个通道,每个通道用一个4×4的子核)。
  • 偏置:
    形状为(out_channels,),也就是(49,)。
    总参数数量是49个,每个输出通道对应一个专属的偏置值。

问题2:输入到输出的运算过程

你的输入形状是(3, 32, 32)(通道数×高度×宽度),输出是(49, 29, 29),这是因为卷积层默认stride=1(滑动步长)和padding=0(无边缘填充),具体运算步骤如下:

  1. 先确定输出尺寸:根据卷积输出尺寸公式output_size = (input_size - kernel_size + 2*padding) // stride + 1,代入数值得到(32 - 4 + 0) // 1 + 1 = 29,所以特征图的高度和宽度都是29。
  2. 针对每个输出通道(共49个):
    • 取出对应通道的3×4×4卷积核,对输入的3个通道分别做局部乘加:比如计算输出某个位置的值时,会取输入图像上对应区域的4×4块(每个通道都取同一块),将卷积核中对应通道的4×4元素和图像块元素逐个相乘后求和,再把三个通道的求和结果加总。
    • 再加上该输出通道对应的偏置值,就得到输出特征图这个位置的数值。
  3. 按照步长1,把这个运算在输入图像的水平、垂直方向滑动,覆盖所有有效位置,最终得到该输出通道的29×29特征图。
  4. 重复上述步骤49次(对应49个输出通道),就得到最终的49×29×29输出张量。

问题3:卷积核的数量与多通道作用方式

  • 卷积核数量:这里会生成49个卷积核,每个卷积核对应一个输出通道。
  • 多通道作用逻辑:每个卷积核是和输入通道数匹配的3通道结构——每个卷积核包含3个4×4的子核,分别对应输入的R、G、B通道。
    运算时,每个子核会和对应的输入通道执行你说的“滑动”操作(局部乘加求和),然后把三个通道的计算结果相加,再加上对应输出通道的偏置,得到输出特征图中一个位置的值。之后通过“全滑动”操作得到整个输出通道的所有值。49个这样的卷积核各自独立运算,最终生成49个不同的输出特征通道。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:22:42