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

理解PyTorch中Conv2DTranspose的实现:带stride与padding的运算疑问

PyTorch ConvTranspose2d 运算逻辑解释

核心运算规则

带stride和padding的转置卷积可以简化为如下计算逻辑:
每个输入特征图上的点(x,y),会将指定大小的卷积核完整映射到输出特征图上,映射的卷积核左上角坐标为(x * stride - padding, y * stride - padding),输出特征图每个位置的最终值,是所有覆盖到该位置的卷积核元素的和。
本次示例参数:

  • 输入为4x4全1张量,坐标范围x∈[0,3], y∈[0,3]
  • 卷积核大小4x4,坐标范围k_i∈[0,3], k_j∈[0,3],数值如下:
    [[ 1,  2,  3,  4],
     [ 5,  6,  7,  8],
     [ 9, 10, 11, 12],
     [13, 14, 15, 16]]
    
  • stride=2,padding=1,无bias

输出位置数值计算示例

输出(0,0)位置的6

仅输入点(0,0)对应的卷积核会覆盖输出(0,0):

  • 输入点(0,0)对应的卷积核左上角坐标为(0*2 -1, 0*2 -1) = (-1, -1)
  • 输出(0,0)对应卷积核的索引为(0 - (-1), 0 - (-1)) = (1, 1)
  • 卷积核(1,1)位置的数值为6,无其他输入点贡献,因此该位置输出为6。

输出(0,1)位置的12

共有两个输入点的卷积核覆盖该位置:

  1. 输入点(0,0):对应卷积核左上角(-1,-1),输出(0,1)对应卷积核索引(1,2),数值为7
  2. 输入点(0,1):对应卷积核左上角(0*2 -1, 1*2 -1) = (-1, 1),输出(0,1)对应卷积核索引(1,0),数值为5
    两者相加7+5=12,和输出结果一致。

所有输出位置的数值都可以按照上述规则计算得到,比如输出(0,2)的14,就是输入(0,0)对应卷积核(1,3)的8,加上输入(0,1)对应卷积核(1,1)的6,总和为14,和结果完全匹配。
内容的提问来源于stack exchange,提问作者IntegrateThis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:36:02