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

PyTorch训练DCGAN时256*256图像报target与input尺寸不匹配错误怎么办

DCGAN切换256*256图像训练时形状不匹配错误解决方案

错误原因

该报错核心是判别器(netD)的输出形状与构造的target形状不匹配:
训练6464尺寸图像时,判别器的下采样层数刚好可以将输入下采样到11的特征图,输出为每个样本对应1个0~1的置信度标量,和[batch_size]形状的target匹配。
切换到256*256尺寸后,原判别器的下采样倍率不足,最终输出的是形状为[batch_size, 1, 13, 13]的特征图,展平后每个样本对应169个预测值,和target形状不符,触发BCELoss的报错。

解决方法

方案1:修改判别器结构(推荐)

两种可选修改方式,二选一即可:

  • 额外增加2层带步幅的下采样卷积层:256尺寸输入要下采样到1*1需要8次减半操作(2^8=256),如果原适配64尺寸的判别器只有6次下采样,补上2层「带步幅2的卷积+BN+LeakyReLU」结构即可。
  • 判别器末尾加全局自适应池化:在判别器最后一层卷积后、Sigmoid激活前,新增nn.AdaptiveAvgPool2d(1)层,不管输入特征图尺寸多大,直接池化到1*1,无需调整下采样层数,适配性更强。

方案2:训练代码层面修正输出形状

如果不想调整网络结构,直接在训练时对判别器的输出做形状对齐即可,需要修改三处调用netD()后的代码,同时同步调整target的形状:

# 原代码:
# output = netD(input)
# target = Variable(torch.ones(input.size()[0]))

# 修改为:
output = netD(input)
# 将输出调整为[batch_size, 1]的形状
output = output.view(output.size(0), -1).mean(1, keepdim=True)
# 同步调整target为相同形状,避免广播警告
target = Variable(torch.ones(input.size()[0], 1))

三处需要修改的位置分别是:

  • 训练判别器用真实图像前向传播后
  • 训练判别器用生成图像前向传播后
  • 训练生成器用生成图像前向传播后

可选优化

当前代码里使用的Variable在PyTorch 0.4及之后版本已经废弃,可以直接用原生Tensor搭配requires_grad=True使用,不影响现有逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:36:03