PyTorch GAN尺寸不匹配报错,求问数值13456的来源
问题分析:13456的来源及解决方案
13456的产生原因
这个数字是判别器输出张量展平后的总元素数量,计算方式为:batch_size × 判别器最后一层特征图的高度 × 特征图的宽度。
你的batch_size是16,13456 ÷ 16 = 841 = 29²,说明判别器最后输出的特征图尺寸是29×29,没有被压缩到1×1的维度。计算BCELoss时,这个(16,1,29,29)的张量会被自动展平成(13456,1),而你的标签是(16)的一维张量,两者尺寸不匹配,因此触发报错。
出现29×29特征图的核心原因是:原教程的判别器是针对64×64图片设计的,你换成512×512图片后未调整卷积结构——原教程通过几次stride=2的卷积下采样,能把64×64图片压缩到1×1,但512×512尺寸需要更多下采样步骤,现有卷积层数不足,导致特征图未能完全压缩。
解决方法
你可以任选一种方式修复:
- 统一图片尺寸:在数据加载时把512×512图片resize到64×64,和原教程输入尺寸一致,判别器无需修改即可正常输出1×1特征图。
- 修改判别器结构:增加若干层stride=2的卷积层,确保经过多次下采样后特征图最终压缩到1×1。比如针对512×512输入,需要至少7次stride=2的下采样才能将尺寸从512降至1。
- 自适应池化:在判别器最后一层卷积后添加
nn.AdaptiveAvgPool2d(1),不管输入图片尺寸如何,都会输出1×1的特征图,保证输出张量形状为(16,1,1,1),展平后与标签尺寸匹配。
内容的提问来源于stack exchange,提问作者easonoob
相关产品推荐
相关产品推荐

