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 相关文章推荐
python获取一组数据里最大值max函数用法实例
May 26 Python
学习python 之编写简单乘法运算题
Feb 27 Python
Pycharm学习教程(3) 代码运行调试
May 03 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
python实现归并排序算法
Nov 22 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 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
php 安全过滤函数代码
2011/05/07 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
用js遍历 table的脚本
2008/07/23 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
从0开始学Vue
2016/10/27 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
2017/12/26 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
python使用PyFetion来发送短信的例子
2014/04/22 Python
推荐11个实用Python库
2015/01/23 Python
python 文件操作删除某行的实例
2017/09/04 Python
python截取两个单词之间的内容方法
2018/12/25 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
laravel使用redis队列实例讲解
2021/03/23 PHP
新闻学专业应届生求职信
2013/11/08 职场文书
外贸业务员的岗位职责
2013/11/23 职场文书
拾金不昧表扬信范文
2014/01/11 职场文书
公司合作意向书范文
2014/07/30 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书