前言

PyTorch通过torch.utils.data对一般的常用数据进行封装,可以很容易地实现多线程数据预读和批量加载。torchvision已经预先实现了常用的图像数据集,包括CIFAR-10、ImageNet、COCO、MNIST、LSUN等数据集,可以通过torchvision.datasets进行方便的调用。

Dataset

在PyTorch中,Dataset是图像数据集中最为重要的一个类,也是所有数据集加载类都需要继承的父类。自定义的继承自Dataset的子类需要继承Dataset的两个成员方法:

  1. def __getitem__(self, index):该方法定义用索引(0~len(self))获取一条数据或一个样本。
  2. def __len__(self):该方法返回数据集的总长度。

下面利用Kaggle上的某个竞赛数据自定义一个数据集,该数据集可直接从Kaggle官网下载,为了方便起见,可通过如下途径获取:链接: https://pan.baidu.com/s/1MfDa1Ff53LSgefXUN3o8yg 提取码: exu5。

首先引入相应的模块。

from torch.utils.data import Datasetimport pandas as pd

然后自定义数据集,继承自Dataset并实现__getitem__( )与__len__( )两个成员方法。

自定义数据集

以上代码自定义了一个非常简单的数据集MyDataSet,在初始化方法__init__( )中加载数据并将其赋值给一个DataFrame,然后实现__getitem__( )与__len__( )两个成员方法,分别返回指定的一条数据和数据集的长度。

定义好一个数据集后,可以通过实例化一个对象进行相关的访问。

实例化自定义数据集

由于我们自定义的数据集MyDataSet实现了__len__( )方法,因此可以直接使用len( )函数获取数据集长度。实现__getitem__( )方法后,可以直接通过索引访问对应的数据。

DataLoader

上述的MyDataSet类可以读入数据集数据并对读入的数据进行索引,但是显然在实际应用中仅仅拥有这个功能是远远不够的,通常我们还需要以下几个功能:

  1. 可以分批次读取。
  2. 可以对数据进行随机读取,进行洗牌操作,打乱数据集内数据分布的顺序。
  3. 可以并行加载数据(利用多核处理器加快载入数据的效率)。

DataLoader为我们提供了对Dataset的各种操作,可以帮我们实现以上功能,在实例化DataLoader对象时常常用到如下参数:

  1. batch_size:每个batch的大小,可用于分批次读取。
  2. shuffle:是否进行shuffle洗牌操作,可用于对数据进行随机读取。
  3. num_workers:加载数据时使用的子进程数量,可用于实现并行加载数据。
my_loader = torch.utils.data.DataLoader(my_data, batch_size=10, shuffle=True, num_workers=0)

上述代码实例化了一个简单的DataLoader对象,其中batch_size为10,表示每个batch的大小为10,shuffle为Ture,表示对数据进行洗牌操作,num_workers为0,表示不进行并行加载数据。

DataLoader返回的是一个可迭代对象,可以使用迭代器分次获取数据。当然,由于batch要求必须包含Tensor或NumPy数组或Numbers或字典或列表,因此我们在使用前需要修改上述MyDataSet中的__getitem__( )方法,将return self.df.iloc[index]修改为return self.df.iloc[index].SalePrice只返回单列数据。

DataLoader

更常见的用法是使用for-in循环对其进行遍历读取。

for-in循环遍历DataLoader

原始数据有点多,这里只打印了前5条数据。

torchvision

torchvision是PyTorch专门用于处理图像的库,常用的模块有torchvision.datasets、torchvision.models和torchvision.transforms。

  • torchvision.datasets

torchvision.datasets提供了很多提前处理好的图片数据集,例如MNIST、COCO、Captions、LSUN等,用户可以直接使用。例如我们利用torchvision.datasets下载MNIST数据集,参数root表示数据加载的目录,train表示是否加载数据的训练集(True加载训练集,False加载测试集),download表示是否自动下载数据集,transform表示是否需要对数据进行预处理(None为不进行预处理)。

下载数据集

运行上述代码就会开始下载MNIST数据集,因为train参数设置为True,所以下载的是MNIST的训练集。下载结束后,就可以在当前路径下发现新生成了一个data目录,里面已经有下载好的MNIST训练集了。

  • torchvision.models

torchvision.models为用户提供了已经训练好的模型,用户可以在加载后直接使用,也可以在进行迁移学习torchvision.models的子模块中包含以下模型结构:

  1. AlexNet
  2. VGG
  3. ResNet
  4. SqueezeNet
  5. DenseNet

与torchvision.datasets一样,要使用torchvision.models中训练好的模型,同样需要从服务器进行下载。

下载模型

当pretrained设置为True时就可以使用预训练的模型了。

  • torchvision.transforms

torchvision.transforms提供了常用的图像转换操作类,可以用作数据处理和数据增强。

pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理相关推荐

  1. Pytorch基础(三)数据集加载及预处理

    目录 下载数据集及显示样本 数据集类 建立数据集类及显示部分样本 数据变换 后记 python提供了许多工具简化数据加载,使代码更具可读性.经常用到的包有scikit-image.pandas等,本文 ...

  2. PyTorch基础(四)-----数据加载和预处理

    前言 之前已经简单讲述了PyTorch的Tensor.Autograd.torch.nn和torch.optim包,通过这些我们已经可以简单的搭建一个网络模型,但这是不够的,我们还需要大量的数据,众所 ...

  3. Tensorflow2.* 加载和预处理数据之用 tf.data 加载磁盘图片数据(4)

    Tensorflow2.* 机器学习基础知识篇: 对服装图像进行分类 使用Tensorflow Hub对未处理的电影评论数据集IMDB进行分类 Keras 机器学习基础知识之对预处理的电影评论文本分类 ...

  4. pytorch dataset自定义_PyTorch 系列 | 数据加载和预处理教程

    原题 | DATA LOADING AND PROCESSING TUTORIAL 作者 | Sasank Chilamkurthy 原文 | https://pytorch.org/tutorial ...

  5. pytorch dataset自定义_PyTorch | 数据加载及预处理教程

    原题 | DATA LOADING AND PROCESSING TUTORIAL 作者 | Sasank Chilamkurthy 译者 | kbsc13("算法猿的成长"公众号 ...

  6. Pytorch深度学习(五):加载数据集以及mini-batch的使用

    Pytorch深度学习(五):加载数据集以及mini-batch的使用 参考B站课程:<PyTorch深度学习实践>完结合集 传送门:<PyTorch深度学习实践>完结合集 一 ...

  7. PyTorch 系列 | 数据加载和预处理教程

    图片来源:Unsplash,作者:Damiano Baschiera 2019 年第 66 篇文章,总第 90 篇文章 本文大约 8000 字,建议收藏阅读 原题 | DATA LOADING AND ...

  8. PyTorch框架学习十九——模型加载与保存

    PyTorch框架学习十九--模型加载与保存 一.序列化与反序列化 二.PyTorch中的序列化与反序列化 1.torch.save 2.torch.load 三.模型的保存 1.方法一:保存整个Mo ...

  9. FreeSql (二十五)延时加载

    FreeSql 支持导航属性延时加载,即当我们需要用到的时候才进行加载(读取),支持1对1.多对1.1对多.多对多关系的导航属性. 当我们希望浏览某条订单信息的时候,才显示其对应的订单详细记录时,我们 ...

最新文章

  1. 不上全站https的网站你们就等着被恶心死吧
  2. 【Android 插件化】VirtualApp 源码分析 ( 添加应用源码分析 | LaunchpadAdapter 适配器 | 适配器添加元素 | PackageAppData 元素 )
  3. oracle 双结点监听文件,RAC监听服务两个节点 只能起一个
  4. mysql句柄是什么_MySQL与句柄
  5. 毕业论文排版之Word 中公式居中,编号靠右该怎么设置(针对左右不对称页边距)
  6. 网络爬虫中的验证码识别
  7. python是什么 自学-自学Python买什么书?
  8. 反击ARP欺骗 我和网络执法官的战斗
  9. 如何在苹果Mac上删除APFS卷?
  10. 接触到的加密算法MD5、SHA1(转)
  11. 使用APUE源码找不到apue.h
  12. H3C交换机SSH配置
  13. 简单好用的图片取色器【可取RGB数值】
  14. Java Game Resource
  15. 周易六十四卦——泽水困卦
  16. hbuilder前端需要的插件_这两款HTML5开发工具,前端开发工程师用了直呼内行
  17. android_app开发微信支付集成
  18. 魔力宝贝登录一直服务器无响应,魔力宝贝归来怎么提升战力?
  19. 【C语言】编写一个程序,当输入小写字母a,输出大写字母Z,当输入小写字母b,输出大写字母Y,以此类推,当输入小写字母z,输出大写字母A。
  20. Keyence激光打标机入门2

热门文章

  1. 【JavaScript】前端模块化:import 和 export 的使用
  2. 算法设计与分析(第三周)递归求阶乘
  3. 理解分布式一致性:拜占庭容错与PBFT
  4. oracle的scn增量备份,Oracle技术之利用scn增量备份实现数据库增量恢复
  5. Java中的Atomic包使用指南
  6. kotlin学习目录
  7. bootstrap内容部分API解读(1)
  8. DbUtils使用原理详解【不懂的来】
  9. 【最详细】数据结构(C语言版 第2版)第五章课后习题答案 严蔚敏 等 编著
  10. 无状态的HTTP协议