PyTorch自定义数据集报错怎么办?教你一招避坑 博客主页瑕疵的CSDN主页 Gitee主页瑕疵的gitee主页⏩ 文章专栏《热点资讯》被 PyTorch 自定义数据集坑了 2 小时终于摸清了根儿目录昨晚写了个自定义数据集跑训练时直接报错RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0我盯着屏幕干瞪眼。查了 Stack Overflow 两小时结果发现是自己蠢得离谱。根源就一个我直接返回了原始图像没统一尺寸。数据集里有些图是 224x224有些是 100x100。DataLoader 在堆叠 batch 时要求所有张量形状一致。我测试过不同尺寸的图像堆一起它直接崩了。错误示范我踩过的真实代码fromtorch.utils.dataimportDatasetclassBadDataset(Dataset):def__init__(self,images):# images 是不同尺寸的 PIL 图像列表self.imagesimagesdef__len__(self):returnlen(self.images)def__getitem__(self,idx):# 错误直接返回原始图像尺寸可能各异returnself.images[idx]# 返回的是 PIL Image不是统一张量跑起来就报错。DataLoader 试图把 224x224 和 100x100 的图塞进同一个 batch它不干。正确姿势直接上代码fromtorchvisionimporttransformsfromtorch.utils.dataimportDataset# 关键定义统一的 transformstransformtransforms.Compose([transforms.Resize((224,224)),# 强制统一尺寸重点transforms.ToTensor()# 转成张量])classGoodDataset(Dataset):def__init__(self,images,transformNone):self.imagesimagesself.transformtransform# 传入 transformsdef__len__(self):returnlen(self.images)def__getitem__(self,idx):imgself.images[idx]ifself.transform:imgself.transform(img)# 应用 transformsreturnimg# 现在 img 是 224x224 张量形状一致避坑总结自定义 Dataset 时__getitem__必须用 transforms 统一图像尺寸。别忘了ToTensor()否则 DataLoaders 会拿 PIL 图像搞不定。如果数据源尺寸不一比如原始数据集混着不同分辨率图在 Dataset 里处理别指望 DataLoader 会自动修复。我昨晚就卡在这儿气得想砸键盘。现在写下来下次直接复制粘贴。记住PyTorch 不会自己帮你补尺寸数据集得自己喂好。深夜写完终于能去睡觉了