pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理
前言
PyTorch通过torch.utils.data对一般的常用数据进行封装,可以很容易地实现多线程数据预读和批量加载。torchvision已经预先实现了常用的图像数据集,包括CIFAR-10、ImageNet、COCO、MNIST、LSUN等数据集,可以通过torchvision.datasets进行方便的调用。
Dataset
在PyTorch中,Dataset是图像数据集中最为重要的一个类,也是所有数据集加载类都需要继承的父类。自定义的继承自Dataset的子类需要继承Dataset的两个成员方法:
- def __getitem__(self, index):该方法定义用索引(0~len(self))获取一条数据或一个样本。
- 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类可以读入数据集数据并对读入的数据进行索引,但是显然在实际应用中仅仅拥有这个功能是远远不够的,通常我们还需要以下几个功能:
- 可以分批次读取。
- 可以对数据进行随机读取,进行洗牌操作,打乱数据集内数据分布的顺序。
- 可以并行加载数据(利用多核处理器加快载入数据的效率)。
DataLoader为我们提供了对Dataset的各种操作,可以帮我们实现以上功能,在实例化DataLoader对象时常常用到如下参数:
- batch_size:每个batch的大小,可用于分批次读取。
- shuffle:是否进行shuffle洗牌操作,可用于对数据进行随机读取。
- 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的子模块中包含以下模型结构:
- AlexNet
- VGG
- ResNet
- SqueezeNet
- DenseNet
与torchvision.datasets一样,要使用torchvision.models中训练好的模型,同样需要从服务器进行下载。
下载模型
当pretrained设置为True时就可以使用预训练的模型了。
- torchvision.transforms
torchvision.transforms提供了常用的图像转换操作类,可以用作数据处理和数据增强。
pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理相关推荐
- Pytorch基础(三)数据集加载及预处理
目录 下载数据集及显示样本 数据集类 建立数据集类及显示部分样本 数据变换 后记 python提供了许多工具简化数据加载,使代码更具可读性.经常用到的包有scikit-image.pandas等,本文 ...
- PyTorch基础(四)-----数据加载和预处理
前言 之前已经简单讲述了PyTorch的Tensor.Autograd.torch.nn和torch.optim包,通过这些我们已经可以简单的搭建一个网络模型,但这是不够的,我们还需要大量的数据,众所 ...
- Tensorflow2.* 加载和预处理数据之用 tf.data 加载磁盘图片数据(4)
Tensorflow2.* 机器学习基础知识篇: 对服装图像进行分类 使用Tensorflow Hub对未处理的电影评论数据集IMDB进行分类 Keras 机器学习基础知识之对预处理的电影评论文本分类 ...
- pytorch dataset自定义_PyTorch 系列 | 数据加载和预处理教程
原题 | DATA LOADING AND PROCESSING TUTORIAL 作者 | Sasank Chilamkurthy 原文 | https://pytorch.org/tutorial ...
- pytorch dataset自定义_PyTorch | 数据加载及预处理教程
原题 | DATA LOADING AND PROCESSING TUTORIAL 作者 | Sasank Chilamkurthy 译者 | kbsc13("算法猿的成长"公众号 ...
- Pytorch深度学习(五):加载数据集以及mini-batch的使用
Pytorch深度学习(五):加载数据集以及mini-batch的使用 参考B站课程:<PyTorch深度学习实践>完结合集 传送门:<PyTorch深度学习实践>完结合集 一 ...
- PyTorch 系列 | 数据加载和预处理教程
图片来源:Unsplash,作者:Damiano Baschiera 2019 年第 66 篇文章,总第 90 篇文章 本文大约 8000 字,建议收藏阅读 原题 | DATA LOADING AND ...
- PyTorch框架学习十九——模型加载与保存
PyTorch框架学习十九--模型加载与保存 一.序列化与反序列化 二.PyTorch中的序列化与反序列化 1.torch.save 2.torch.load 三.模型的保存 1.方法一:保存整个Mo ...
- FreeSql (二十五)延时加载
FreeSql 支持导航属性延时加载,即当我们需要用到的时候才进行加载(读取),支持1对1.多对1.1对多.多对多关系的导航属性. 当我们希望浏览某条订单信息的时候,才显示其对应的订单详细记录时,我们 ...
最新文章
- 不上全站https的网站你们就等着被恶心死吧
- 【Android 插件化】VirtualApp 源码分析 ( 添加应用源码分析 | LaunchpadAdapter 适配器 | 适配器添加元素 | PackageAppData 元素 )
- oracle 双结点监听文件,RAC监听服务两个节点 只能起一个
- mysql句柄是什么_MySQL与句柄
- 毕业论文排版之Word 中公式居中,编号靠右该怎么设置(针对左右不对称页边距)
- 网络爬虫中的验证码识别
- python是什么 自学-自学Python买什么书?
- 反击ARP欺骗 我和网络执法官的战斗
- 如何在苹果Mac上删除APFS卷?
- 接触到的加密算法MD5、SHA1(转)
- 使用APUE源码找不到apue.h
- H3C交换机SSH配置
- 简单好用的图片取色器【可取RGB数值】
- Java Game Resource
- 周易六十四卦——泽水困卦
- hbuilder前端需要的插件_这两款HTML5开发工具,前端开发工程师用了直呼内行
- android_app开发微信支付集成
- 魔力宝贝登录一直服务器无响应,魔力宝贝归来怎么提升战力?
- 【C语言】编写一个程序,当输入小写字母a,输出大写字母Z,当输入小写字母b,输出大写字母Y,以此类推,当输入小写字母z,输出大写字母A。
- Keyence激光打标机入门2