PyTorch 解决Dataset和Dataloader遇到的问题


Posted in Python onJanuary 08, 2020

今天在使用PyTorch中Dataset遇到了一个问题。先看代码

class psDataset(Dataset):
  def __init__(self, x, y, transforms = None):
    super(Dataset, self).__init__()
    self.x = x
    self.y = y
    if transforms == None:
      self.transforms = Compose([Resize((224, 224)), ToTensor()])
    else:
      self.transforms = transforms
    
  def __len__(self):
    return len(self.x)
  
  def __getitem__(self, idx):
    img = Image.open(self.x[idx])
    img = self.transforms(img)    
    return img, torch.tensor([[self.y[idx]]])

结果运行时报错:RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 3 and 1 in dimension 1 at /opt/conda/conda-bld/pytorch_1522182087074/work/torch/lib/TH/generic/THTensorMath.c:2897

Google了一下发现是这样的:读入的图片有些是灰度图(1个通道),绝大多数是RGB图片(3通道),也有些是带透明度的(4通道)

。这导致在读入后最后一个维度(通道数)不一致(可能是1、3或者4)。

Dataloader在制作batch data时,tensor的shape必须一样,就报了这个错误。解决的方法是:img = img.convert(“RGB”)。完

整代码如下:

class psDataset(Dataset):
  def __init__(self, x, y, transforms = None):
    super(Dataset, self).__init__()
    self.x = x
    self.y = y
    if transforms == None:
      self.transforms = Compose([Resize((224, 224)), ToTensor()])
    else:
      self.transforms = transforms
    
  def __len__(self):
    return len(self.x)
  
  def __getitem__(self, idx):
    img = Image.open(self.x[idx])
    img = img.convert("RGB")
    img = self.transforms(img)    
    return img, torch.tensor([[self.y[idx]]])

以上这篇PyTorch 解决Dataset和Dataloader遇到的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
matplotlib subplots 调整子图间矩的实例
May 25 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
python制作mysql数据迁移脚本
Jan 01 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
Python3内置模块random随机方法小结
Jul 13 Python
Django model 中设置联合约束和联合索引的方法
Aug 06 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
Python 实现数组相减示例
Dec 27 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
python实现3D地图可视化
Mar 25 Python
Django 实现对已存在的model进行更改
Mar 28 Python
浅谈Python项目的服务器部署
Apr 25 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 #Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 #Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 #Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 #Python
pyinstaller还原python代码过程图解
Jan 08 #Python
python Tensor和Array对比分析
Jan 08 #Python
Pycharm小白级简单使用教程
Jan 08 #Python
You might like
当海贼王变成JOJO风
2020/03/02 日漫
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
javascript常用的方法整理
2015/08/20 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
原生js生成图片验证码
2020/10/11 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
元旦晚会策划方案
2014/02/18 职场文书
房产公证书样本
2015/01/23 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
赢在中国观后感
2015/06/02 职场文书
2015年环境监察工作总结
2015/07/23 职场文书