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

自定义数据集训练CNN遇张量尺寸不匹配错误,Resize无效求排查

解决RuntimeError: stack expects each tensor to be equal size的问题

你遇到的错误核心原因是:transforms.Resize(224)并没有把所有图像统一缩放到固定的224×224尺寸。

当只给Resize传一个整数参数时,PyTorch会按照保持原图像宽高比的规则,将图像的短边缩放到224,长边按比例自动缩放。比如原本宽高比例不同的图片,处理后会得到[3,224,255]、[3,224,351]这类尺寸不一致的张量,而DataLoader在打包batch时要求所有张量尺寸完全相同,因此触发stack操作的报错。

两种可行的解决方法:

方法1:强制缩放到固定尺寸

直接给Resize传入宽高组成的元组,强制将所有图像缩放到224×224,无需保持原比例:

#------------------------train transform----------------------#
train_transform=transforms.Compose([
    transforms.Resize((224, 224)),  # 指定固定宽高
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
])
    
#------------------------test transform------------------------------#
test_transform=transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
])

方法2:先缩放再裁剪(保持原比例更友好)

先将短边缩放到一个比目标尺寸大的值(比如256),再通过裁剪得到固定尺寸224×224,这种方式能避免图像过度拉伸,训练时还能加入随机裁剪增强数据:

#------------------------train transform----------------------#
train_transform=transforms.Compose([
    transforms.Resize(256),  # 短边缩至256,保持比例
    transforms.RandomCrop(224),  # 随机裁剪224×224
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
])
    
#------------------------test transform------------------------------#
test_transform=transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),  # 中心裁剪224×224
    transforms.ToTensor(),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
])

调整后重新运行代码,DataLoader就能正常打包batch,不会再出现尺寸不匹配的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:23:25