【CVCVCV】dataloader报错RuntimeError: Caught RuntimeError in DataLoader worker process 0
参考文献
https://blog.csdn.net/SHY0978/article/details/129708911
问题描述
标题这个报错信息其实可能由多种不同原因引起,我遇到的原因是下面这个:
RuntimeError: stack expects each tensor to be equal size, but got [3, 200, 200]entry1
解释
这个报错信息主要反映了在使用PyTorch的DataLoader加载数据时出现的张量尺寸不匹配问题,具体含义如下:
-
错误发生场景:
错误发生在DataLoader的工作进程(worker process 0)中。DataLoader是PyTorch中用于批量加载数据的工具,它会启动多个工作进程并行读取数据,并将多个样本组合成一个批次(batch)。 -
核心错误原因:
关键信息是stack expects each tensor to be equal size, but got [3, 200, 200] entry1。stack指的是将多个张量(tensors)组合成一个批次张量的操作(例如通过torch.stack或DataLoader内部的批次拼接逻辑)。- 这个操作要求参与组合的所有张量必须具有完全相同的尺寸(包括通道数、高度、宽度等维度)。
- 但实际处理中,发现了尺寸为
[3, 200, 200]的张量(可能是一个3通道、200x200大小的图像),而批次中还有其他尺寸不同的张量(例如可能存在[3, 256, 256]或[3, 180, 180]的张量),导致无法完成拼接。
简单来说:你的数据集中存在尺寸不一致的样本(如图像大小不同),DataLoader在尝试将它们打包成一个批次时,因尺寸不匹配而失败。
解决思路通常是在数据预处理阶段(如Dataset的__getitem__方法中),通过resize等操作将所有样本统一为相同尺寸。
上面是豆包给的解释
解决
首先把训练集的image per batch调成1,然后把训练集删到只剩一张图片
运行后发现另一个错误,test集中HR和LR的图片名字不一样,对应不起来
改图片名再次运行后发现能正常训练。
结果尴尬的事情来了:再次用回到正常训练集后发现也能正常训练。。。
猜测是test集里图片名字不一致引起的报错

浙公网安备 33010602011771号