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

PyTorch中Conv2D层padding参数运行结果与预期不符问题求解

PyTorch Conv2D计算结果不符合预期的原因

1. 输出尺寸和预期不符的原因

PyTorch中Conv2D层的输出尺寸有明确的官方计算规则,对于输入高度H_in,输出高度H_out的计算公式为:

H_out = floor((H_in + 2*padding - dilation*(kernel_size - 1) - 1) / stride + 1)

默认情况下卷积的扩张系数dilation=1,代入你给出的参数:

  • H_in = 6,padding=2,kernel_size=5,stride=2
    计算过程如下:
H_out = floor((6 + 2*2 - 1*(5-1) -1)/2 + 1) = floor(5/2) +1 = 2 +1 =3

宽度计算规则和高度完全一致,所以最终输出特征图尺寸为3*3,和你运行代码得到的结果一致,你之前的尺寸计算逻辑存在错误。

2. 输出没有零值的原因

你这里存在两处认知偏差:

  • 你贴出的y[0][0]结果尺寸为6*6,明显和y.shape的[1,1,3,3]冲突,属于打印错误,大概率是你误把输入张量x的打印结果当成了输出y的结果。
  • 零填充是作用在输入张量上的,并不会直接出现在输出结果里:卷积的输出是感受野内的所有元素(包括填充的零)和卷积核权重逐元素相乘累加后,再加上偏置的结果。Conv2D层默认会随机初始化卷积核权重和偏置,就算有填充的零参与计算,最终的累加+偏置结果几乎不可能刚好为零,所以输出里不会出现你预期的零值。

你如果想验证填充逻辑,可以手动把卷积核权重设为全1、关闭偏置,再运行代码,就能通过输出结果反推填充逻辑,示例代码如下:

import torch
from torch import nn
x = torch.ones(1,1,6,6)
conv = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=5, stride=2, padding=2, bias=False)
# 手动把卷积核设为全1
nn.init.constant_(conv.weight, 1)
y = conv(x)
print(y.shape)
print(y[0][0])

此时输出的每个值就是对应感受野内的元素总和,你可以自行计算验证填充逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:36:04