Loading

【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加载数据时出现的张量尺寸不匹配问题,具体含义如下:

  1. 错误发生场景
    错误发生在DataLoader的工作进程(worker process 0)中。DataLoader是PyTorch中用于批量加载数据的工具,它会启动多个工作进程并行读取数据,并将多个样本组合成一个批次(batch)。

  2. 核心错误原因
    关键信息是stack expects each tensor to be equal size, but got [3, 200, 200] entry1

    • stack指的是将多个张量(tensors)组合成一个批次张量的操作(例如通过torch.stackDataLoader内部的批次拼接逻辑)。
    • 这个操作要求参与组合的所有张量必须具有完全相同的尺寸(包括通道数、高度、宽度等维度)。
    • 但实际处理中,发现了尺寸为[3, 200, 200]的张量(可能是一个3通道、200x200大小的图像),而批次中还有其他尺寸不同的张量(例如可能存在[3, 256, 256][3, 180, 180]的张量),导致无法完成拼接。

简单来说:你的数据集中存在尺寸不一致的样本(如图像大小不同),DataLoader在尝试将它们打包成一个批次时,因尺寸不匹配而失败

解决思路通常是在数据预处理阶段(如Dataset__getitem__方法中),通过resize等操作将所有样本统一为相同尺寸。

上面是豆包给的解释

解决

首先把训练集的image per batch调成1,然后把训练集删到只剩一张图片
运行后发现另一个错误,test集中HR和LR的图片名字不一样,对应不起来
改图片名再次运行后发现能正常训练。
结果尴尬的事情来了:再次用回到正常训练集后发现也能正常训练。。。
猜测是test集里图片名字不一致引起的报错

posted @ 2025-09-23 15:34  SaTsuki26681534  阅读(59)  评论(0)    收藏  举报