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

Conv2D维度计算方法及GAN生成器转置卷积维度异常疑问

Conv2D与ConvTranspose2D维度计算详解及GAN生成器维度问题排查

一、Conv2D(正向卷积)维度计算公式

对于2D卷积层,输出特征图的尺寸计算遵循以下公式:

H_out = floor((H_in - K + 2*P) / S) + 1
W_out = floor((W_in - K + 2*P) / S) + 1

其中:

  • H_in/W_in:输入特征图的高/宽
  • K:卷积核的边长(假设正方形核)
  • P:填充(padding)的像素数
  • S:步长(stride)
  • floor():向下取整操作

举个例子:输入尺寸5x5,K=3,S=1,P=0,输出尺寸为(5-3+0)/1 +1 = 3,即3x3。

二、ConvTranspose2D(转置卷积)维度计算公式

你误用了Conv2D的公式来计算转置卷积的输出,这是核心错误:转置卷积是正向卷积的反向操作,尺寸计算逻辑完全不同,正确公式为:

H_out = (H_in - 1)*S - 2*P + K + OP
W_out = (W_in - 1)*S - 2*P + K + OP

其中:

  • OP:输出填充(output_padding),可选参数,用于微调尺寸以避免歧义,通常取0或1
  • 其余参数定义与Conv2D一致

三、你的GAN生成器维度问题排查

你的生成器输入是torch.Size([128, 74, 1, 1]),即批量大小128,通道数74,特征图尺寸1x1,第一块转置卷积输出3x3。代入转置卷积公式反推参数:
假设该层参数为kernel_size=3,stride=1,padding=0,output_padding=0,计算过程为:

H_out = (1-1)*1 - 2*0 +3 +0 = 3

正好匹配实际输出的3x3。

如果误用Conv2D的公式计算:

H_out = floor((1-3 + 2*0)/1) +1 = floor(-2)+1 = -1

(你得到0可能是框架对负数取整的处理差异,但本质是公式用错了)

四、生成器尺寸放大的典型逻辑

你的生成器是从1x1的潜在向量(拼接64维latent和10维类别标签后通道数为74)逐步放大到目标尺寸,后续的6x6输出可以继续用转置卷积公式推导:
比如从3x3到6x6,可能的参数组合是kernel_size=4,stride=2,padding=1,output_padding=0:

H_out = (3-1)*2 -2*1 +4 +0 = 4 -2 +4 =6

完全符合预期。

排查建议

  • 严格区分Conv2D和ConvTranspose2D的计算公式,绝对不能混用
  • 列出每一层转置卷积的kernel_size、stride、padding、output_padding参数
  • 代入转置卷积公式逐层计算,和实际输出尺寸对比验证
  • 若计算结果与实际存在1像素差异,检查是否设置了output_padding=1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:13:18