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

解决PyTorch模型RuntimeError:输入(64x1x1)输出(64x0x0)尺寸过小问题

PyTorch RuntimeError 解决方案:输出尺寸过小问题

报错原因

RuntimeError: Given input size: (64x1x1). Calculated output size: (64x0x0). Output size is too small 是因为特征图尺寸被连续池化压缩到1x1后,后续操作(池化/卷积)无法生成有效输出,导致尺寸变为0。从你的forward流程看,三次连续的nn.MaxPool2d(2)是核心诱因——每次池化将宽高减半,若初始输入尺寸不足,经过几次池化后就会出现1x1的特征图,再操作就会溢出为0。

具体修复方案

1. 动态控制池化操作

避免在特征图尺寸≤1时执行池化,替换原有的固定池化代码:

# 替换每次的 x = nn.MaxPool2d(2)(x)
if x.size(-2) > 1 and x.size(-1) > 1:
    x = nn.MaxPool2d(2)(x)

2. 修正block内的卷积层

检查block0/block2/block4中的卷积层,若卷积核尺寸大于输入特征图尺寸且无padding,会直接输出0。调整卷积层参数:

  • 给卷积添加padding,保证输入输出尺寸匹配:
    # 示例:3x3卷积添加padding=1
    nn.Conv2d(in_ch, out_ch, kernel_size=3, padding=1)
    
  • 当特征图尺寸小于卷积核时,改用1x1卷积替代大核卷积。

3. 替换为自适应池化

确认self.avgpool的类型,若使用固定尺寸池化(如nn.AvgPool2d(2)),在输入1x1时会出错。改用自适应全局平均池化:

# 初始化avgpool时改为
self.avgpool = nn.AdaptiveAvgPool2d(1)

无论输入特征图尺寸多大,都能输出1x1的特征,避免尺寸丢失。

4. 增大初始输入尺寸

如果业务允许,将输入图像的宽高调大(比如从28x28改为64x64),确保三次池化后仍能保留大于1的特征图尺寸。

调试技巧

在forward中添加尺寸打印,快速定位问题环节:

print("After first_bn:", x.shape)
print("After block0:", x0.shape)
print("After first pool:", x.shape)
# 每一步都打印特征图shape

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:48:43