pytorch利用Dataset读取数据报错问题及解决

 更新时间:2023年09月09日 16:09:12   作者:josenxiao  
这篇文章主要介绍了pytorch利用Dataset读取数据报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

报错点

如下:

Traceback (most recent call last):
  File "read_data.py", line 100, in <module>
    for i , (image,seg) in enumerate(train_loader):
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 819, in __next__
    return self._process_data(data)
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 846, in _process_data
    data.reraise()
  File "/usr/local/lib/python3.6/dist-packages/torch/_utils.py", line 369, in reraise
    raise self.exc_type(msg)
TypeError: Caught TypeError in DataLoader worker process 0.
Original Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 178, in _worker_loop
    data = fetcher.fetch(index)
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "read_data.py", line 91, in __getitem__
    ])(img)
  File "/usr/local/lib/python3.6/dist-packages/torchvision/transforms/transforms.py", line 61, in __call__
    img = t(img)
  File "/usr/local/lib/python3.6/dist-packages/torchvision/transforms/transforms.py", line 238, in __call__
    return F.center_crop(img, self.size)
  File "/usr/local/lib/python3.6/dist-packages/torchvision/transforms/functional.py", line 374, in center_crop
    w, h = img.size
TypeError: 'int' object is not iterable

原来我其实没有注意Datset与PIL下面的Image的关系:

    def __getitem__(self, index):
        img = cv2.imread(self.image_name[index],cv2.COLOR_BGR2RGB)
        #img = np.transpose(img,(2,1,0))
        img = cv2.resize(img,(self.size,self.size))
        seg = cv2.imread(self.image_seg[index],cv2.COLOR_BGR2RGB)
        seg = cv2.resize(seg,(self.size,self.size) )
        seg = convert_from_color_segmentation(seg)
        #seg = torch.from_numpy(seg)
        if self.transform is not  None:
           img = self.transform(img)
        return img , seg

报错中清晰提及这个问题

我突然反应过来,是自己的读取数据错误了:

应该为:

    def __getitem__(self, index):
        #img = cv2.imread(self.image_name[index],cv2.COLOR_BGR2RGB)
        img = Image.open(self.image_name[index])
        #img = np.transpose(img,(2,1,0))
        #img = cv2.resize(img,(self.size,self.size))
        seg = cv2.imread(self.image_seg[index],cv2.COLOR_BGR2RGB)
        seg = cv2.resize(seg,(self.size,self.size) )
        seg = convert_from_color_segmentation(seg)
        #seg = torch.from_numpy(seg)
        if self.transform is not  None:
           img = self.transform(img)
        return img , seg

测试打印数据

完美解决

transform = transforms.Compose([transforms.Resize((300,300)),transforms.RandomCrop((224,224)),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])
#transform = transforms.Compose([
#                                               transforms.CenterCrop((278,278)),transforms.Resize((224,224)),transforms.ToTensor()
#                                                                              ])
train_data = GetParasetData(size=224,train=True,transform=transform)
train_loader = DataLoader(train_data,batch_size=64,shuffle=True,num_workers=2)
for i , (image,seg) in enumerate(train_loader):
    print(image.shape,seg.shape)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python脚本打包成可执行文件过程解析

    Python脚本打包成可执行文件过程解析

    这篇文章主要介绍了Python脚本打包成可执行文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • python dict remove数组删除(del,pop)

    python dict remove数组删除(del,pop)

    我们在用数组列表做删除的时候,可能选择2个方法,一个是del,一个是pop方法
    2013-03-03
  • python授权加密的几种常见方案

    python授权加密的几种常见方案

    文章介绍了几种提高软件授权码安全性的方法,包括使用非对称加密、硬件绑定、时间限制、HMAC或对称加密以及使用在线授权服务器,建议企业级产品采用服务器+本地加密结合的方式,感兴趣的朋友一起看看吧
    2025-03-03
  • Python爬虫之BeautifulSoup的基本使用教程

    Python爬虫之BeautifulSoup的基本使用教程

    Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功,下面这篇文章主要给大家介绍了关于Python爬虫之BeautifulSoup的基本使用教程,需要的朋友可以参考下
    2022-03-03
  • 浅谈Python单向链表的实现

    浅谈Python单向链表的实现

    本文给大家简单介绍了下链表的知识,然后用Python模拟一下单链表,比较简单,初学者可以参考参考,大神可以给我点改进意见
    2015-12-12
  • python中用logging实现日志滚动和过期日志删除功能

    python中用logging实现日志滚动和过期日志删除功能

    这篇文章主要介绍了python中用logging实现日志滚动和过期日志删除功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Python提取支付宝和微信支付二维码的示例代码

    Python提取支付宝和微信支付二维码的示例代码

    本文将教你使用 Python 的图像处理库 pillow,轻松批量提取图片中间的方形二维码部分。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • python爬取晋江文学城小说评论(情绪分析)

    python爬取晋江文学城小说评论(情绪分析)

    这篇文章主要介绍了使用python爬取晋江文学城小说评论(情绪分析),全文代码详细,逻辑清晰,很适合学习爬虫爬取的朋友,需要的朋友可以参考下
    2021-04-04
  • Python远程控制MySQL的完整指南

    Python远程控制MySQL的完整指南

    MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最佳实践
    2025-06-06
  • python 追踪except信息方式

    python 追踪except信息方式

    这篇文章主要介绍了python 追踪except信息方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论