lib\multiprocessing\spawn.py“, line xxx, in _main self = reduction.pickle.load(from_parent) EOFError
2026/7/1 23:00:33 网站建设 项目流程

问题:运行图像任务py脚本报错

\torch_py310\lib\multiprocessing\spawn.py", line 126, in _main self = reduction.pickle.load(from_parent) EOFError: Ran out of input

解决方法:

报错根因(一句话)

AttributeError: Can't pickle local object 'main.<locals>.PVImageDataset'

👉Dataset 类定义在main()函数内部,Windows 的 spawn 机制无法 pickle(序列化)它


方案一(推荐,规范做法)

修改点 1:把PVImageDataset移到main()外面

原来(错误位置)

def main(): ... class PVImageDataset(Dataset): ...

修改为(正确)

放在文件最外层(main()之前)

然后main() 里只保留使用

train_dataset = PVImageDataset(train_paths, train_labels, train_transform) val_dataset = PVImageDataset(val_paths, val_labels, val_transform)

✔ 这是标准工业级写法
✔ 保留num_workers=2
✔ 训练速度正常


方案二(临时规避,不推荐)

如果你现在只想立刻跑起来

修改点 2:把num_workers设为 0

train_loader = DataLoader( train_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=0, # ← 改这里 pin_memory=True, ) val_loader = DataLoader( val_dataset, batch_size=BATCH_SIZE, shuffle=False, num_workers=0, # ← 改这里 pin_memory=True, )

✔ 不需要改 Dataset 位置
✘ 数据加载慢
✘ 不适合正式实验

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询