自定义数据集DataLoader迭代载入时报错“<class ‘NoneType‘>”

Pytorch中DataLoader自定义数据集载入时报错“TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found 《class 'NoneType'》”

问题描述

创建自己的数据集并用DataLoader载入时报出如下错误:
在这里插入图片描述

产生原因

该问题表明在用迭代器循环载入数据及标签时,存在某一数据类型为’None’

解决办法

提前剔除数据类型为’None’的数据

  1. 自定义数据集中__getitem__(self, idx)函数的循环长度由同一类中的__len__(self)函数确定;
  2. 如果该循环长度内的数据中有类型为’None’的数据,则在主程序中用DataLoader迭代载入数据时就会出现上述错误;
  3. 故此,在自定义数据集_pre_process(self)函数中要先去除数据类型为’None’的数据,再计算去除数据类型为’None’后剩余数据的长度,该长度就为自定义数据集的长度,也就是1中的循环长度;
  4. 用不含’None’数据类型的循环长度,再去实现__getitem__中的内容,才能保证主程序中用DataLoader迭代载入数据时不报上述错误。

程序展示

该程序为提取病理切片肿瘤区域所对应的patch

wsi_path:jpg格式病理切片的存储位置
mask_path:该病理切片npy格式的肿瘤掩码(肿瘤区域值为255,其他区域元素值为0)

import numpy as np
from torch.utils.data import Dataset
from PIL import Image

Image.MAX_IMAGE_PIXELS = None

class WSIPatchDataset(Dataset):
    def __init__(self, wsi_path, mask_path, image_size=256, crop_size=224,
                 normalize=True, flip='NONE', rotate='NONE'):
        self._wsi_path = wsi_path
        self._
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值