遇ValueError: num_samples=0错误求解决(CIFAR10+PyTorch)
排查PyTorch DataLoader
num_samples=0 错误的方案 这个错误的核心是你的自定义InpaintDatasetLoader实例没有加载到任何有效数据,导致DataLoader初始化时获取到的样本数为0。按以下步骤逐一排查解决:
1. 先确认数据集本身的有效性
- 检查CIFAR10数据集的下载/存放状态:如果是自动下载,确认Colab环境的
root路径有读写权限,且下载过程未中断;如果是手动上传的数据集,确认文件未损坏、路径拼写完全正确。 - 直接打印自定义数据集的长度:在创建DataLoader之前,加一行代码:
如果输出为0,说明数据集初始化逻辑有问题,重点看下面的步骤。train_dataset = InpaintDatasetLoader(...) # 你的数据集实例化代码 print(len(train_dataset))
2. 排查自定义数据集的核心方法
- 检查
__len__方法:这个方法的返回值直接决定了DataLoader识别的样本数,确保它返回的是实际有效样本的数量,而非误写为0,或是筛选条件过于严格导致无符合要求的样本。 - 调试
__getitem__方法:如果__len__返回正常但仍报错,可能是部分样本读取失败导致实际可访问样本为空。循环遍历前几个样本测试:
根据报错信息修复读取、预处理逻辑,比如图片裁剪参数错误、数据格式不匹配等问题。for i in range(5): try: _ = train_dataset[i] print(f"样本{i}加载成功") except Exception as e: print(f"加载样本{i}出错: {str(e)}")
3. 检查DataLoader的参数设置
- 避免错误的采样器配置:如果设置了
sampler或batch_sampler,确认它们没有过滤掉所有样本。 - 临时调整
num_workers:Colab环境下如果num_workers设置过大,可能会因多进程权限问题导致数据加载失败,先设为num_workers=0测试是否解决问题。
内容的提问来源于stack exchange,提问作者user17446822
相关产品推荐
相关产品推荐

