Pytorch(3)-数据载入接口:Dataloader、datasets

pytorch数据载入

  • 1.数据载入概况
    • Dataloader 是啥
  • 2.支持的三类数据集
    • 2.1 torchvision.datasets.xxx
    • 2.2 torchvision.datasets.ImageFolder
    • 2.3 写自己的数据类,读入定制化数据
      • 2.3.1 数据类的编写
        • map-style范式
        • iterable-style 范式
      • 2.3.2 DataLoader 导入数据类

1.数据载入概况

数据是机器学习算法的驱动力, Pytorch提供了方便的数据载入和处理接口. 数据载入流程为:

step1: 指定要使用的数据集dataset
step2: 使用Dataloader载入数据

dataloader实质是一个可迭代对象,不能使用next()访问。但如果使用iter()封装,返回一个迭代器,可以使用.next()操作。

Dataloader 是啥

来自官网document的描述:

Dataloader. Combines a dataset and a sampler, and provides an iterable over the given dataset.
The DataLoader supports both map-style and iterable-style datasets with single- or multi-process loading, 
customizing loading order and optional automatic batching (collation) and memory pinning.
See torch.utils.data documentation page for more details.

大概就是说:用来对数据集进行(小批次)迭代 载入的接口,所能够载入的数据集要么支持map-style操作,要么支持 iterable-style操作。

(这两种操作只有在编写用户数据类时才需要考虑,使用内置公开数据集和.ImageFolder不需要管这两者是啥东西,开发者已经帮你写好了)

2.支持的三类数据集

1.torchvision.datasets–内置了许多常见的公开数据集

2.torchvision.datasets.ImageFolder–用户定制数据集1(只要自己的数据集满足ImageFolder要求的格式,提供数据集所在的地址即可)

3.定制数据集–需要编写自己的dataset 类

2.1 torchvision.datasets.xxx

一些常用的公开数据集合,可以在torchvision.datasets接口中找到。

例如–MNIST、Fashion-MNIST、KMNIST、EMNIST、FakeData、COCO、Captions、Detection、LSUN、ImageFolder、DatasetFolder、ImageNet、CIFAR、STL10、SVHN、PhotoTour、SBU、Flickr、VOC、Cityscapes、SBD等常用数据集合。

torchvision.datasets在使用一个新的数据集合前,需要保证本地拥有该数据集合(符合pytorch内部编码格式)。最简单额方式是第一次使用时,将download=True将默认将该数据集下载到指定的root 目录中。

CIFAR10数据集使用的例子

transform = transforms.Compose( [transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True, num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data', train=False,download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,shuffle=False, num_workers=2)
默认值:train=True

step1 数据集选择与图片处理方式选择

trainset = torchvision.datasets.CIFAR10(root=’./data’, train=True,download=True, transform=transform)
testset = torchvision.datasets.CIFAR10(root=’./data’, train=False,download=True, transform=transform)

参数解释:
1.root=’./data’
数据集的保存目录,各种数据集有自己的文件格式,其中MNIST是以training.pt和test.pt的保存图像数据信息(具体看一下文件应该怎么存,读入之后的列表和迭代器各是什么内容

2.train =True
处理MNIST时从training.pt读取训练数据,=False 从test.pt读取测试数据。仔细观察,上面两句话只有在train这个选项处不同.

3.download =True
会从网上下载对应的数据集文件,MNIST对应.pt文件,如果存在 .pt 文件,这个参数可以设置为False

4.transform
设置一组对图像进行处理的操作,这一组操作由Compose组成,这一组compose 的顺序还很重要按如下顺序编写:
transforms.Resize()
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),

step2 数据载入接口

trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True, num_workers=2)
testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)

参数解释
1.将刚刚生成的trainset列表传入 torch.utils.data.DataLoader()

2.batch_size=4 设定图像数据批次大小

3.shuffle=True 每一个epoch过程中会打乱数据顺序,重新随机选择

4.导入数据时的线程数目,默认为0,主线程导入数据

2.2 torchvision.datasets.ImageFolder

当数据集超出1中所提供数据集的范围时,Pytorch还提供了ImageFolder数据集导入方式。只要将数据按照一定的要求存放,就能如方式1一样方便取用。

数据集合格式要求:同类别的图像放在一个文件夹下,用类别名称/标号来命名文件夹。要自己手工设计训练集合、测试集合

x=torch.datasets.ImageFolder(root="图像集合中文件夹路径”)

x是一个ImageFolder格式的数据:
在这里插入图片描述
其中重要主要成员为:
class_to_idx ={dict} 是字典数据,以“文件夹名字:分配类别序号”作为键值的字典
classes ={list} 包含所有文件夹名字的一个序列
imgs={list} 列表元素为–(图像路径,对应文件夹名)

使用torch.utils.data.DataLoader载入数据:

trainloader = torch.utils.data.DataLoader(x, batch_size=4, shuffle=True, num_workers=4)

参考网址:
https://pytorch.org/tutorials/beginner/data_loading_tutorial.html

2.3 写自己的数据类,读入定制化数据

当用户数据个格式不能用以上两种方式读取时,可以尝试写自己的数据类

所有的datasets都是torch.utils.data.Dataset的子类,方法1中使用的是torchvision.datasets.数据集,方法 2中使用的是torchvision.datasets.ImageFolder。当我们在编写自己的数据类时,也需要继承Dataset类。

2.3.1 数据类的编写

在介绍Dataloader 使提到过,其载入的数据类需要满足两者操作中的一个(map-style操作/iterable-style操作)

map-style范式

Map-style 操作范式数据类的核心:实现了 getitem() 和 len()方法,通过data[index]获取数据样本和相应的标签。

猜测:DataLoader 在导入minibatch数据时,随机采样一批index(通过len确认index 的采样范围), 然后在经过getitem获取相应的数据

class MyDataset:def __init__(self, gentor: object, batchSize: int, imgSize: int):# 从源数据中读取数据列表,或者能操作数据的名称列表def __len__(self):# 返回数据集样本的数量return sample_map_numdef __getitem__(self, idx:int):# 通过idx获取数据datadata = get(idx)   // get 依据不同的数据集定制// 进行一些tansform操作在返回return data

官方实践demo:https://pytorch.org/tutorials/beginner/data_loading_tutorial.html

iterable-style 范式

Iterable-style 操作范式数据类 是 IterableDataset的子类,实现了__iter__()方法。当随机读取非常耗时/无法实现时。(数据流,实时记录的数据)
有机会实践一下

2.3.2 DataLoader 导入数据类

编写好了自己的数据类之后,同其他两种数据类一样使用DataLoader导入数据即可。

    train_set = MyDataset()data = train_set[0]       # idx 读取某一个数据trainloader = DataLoader(train_set, batch_size=64, shuffle=True)     # 封装成dataloader的形式print(len(trainloader))for _, data in enumerate(trainloader):....

下面提供一些可供参考的博文:
https://www.jianshu.com/p/220357ca3342
https://www.cnblogs.com/devilmaycry812839668/p/10122148.html
https://ptorch.com/news/215.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据学习(5)-- NoSQL数据库

文章目录目录1.NoSQL的介绍2.NoSQL产生的原因2.1 web2.02.2 NoSQL兴起原因3.NoSQL和关系数据库的区别4.NoSQL的四大类型4.1 键值数据库4.2 列族数据库4.3 文档数据库4.4 图形数据库4.5 不同类型的NoSQL数据库进行比较5.NoSQL的三大基石5.1 CAP5.2 base5.3 最终一致性6.从NoSQL到…

经典算法重点总结

文章目录排序算法冒泡排序直接插入排序希尔排序直接选择排序快速排序堆排序归并排序总结查找算法顺序查找二分查找插值查找斐波那契查找树表查找分块查找哈希查找总结排序算法 冒泡排序 void bubbleSort(int a[] , int n){for(int i n-1 ; i > 0 ; i--){for(int j 0 ; j …

redis——HyperLogLog

HyperLogLog 是一种概率数据结构,用来估算数据的基数。数据集可以是网站访客的 IP 地址,E-mail 邮箱或者用户 ID。 基数就是指一个集合中不同值的数目,比如 a, b, c, d 的基数就是 4,a, b, c, d, a 的基数还是 4。虽然 a 出现两次…

机器学习知识总结系列-机器学习中的优化算法总结(1-4)

文章目录1.梯度下降1.1批量梯度下降(BGD)1.2随机梯度下降(SGD)1.3 小批量随机梯度下降(MSGD)1.4 比较:1.5 动量算法(momentum)1.6 Nestrov Momentum2. 自适应方法2.1 自适应学习率算法&#xff…

Python(19)-字符串、Unicode字符串

高级数据类型--字符串、Unicode字符串1.字符串的定义2.字符串的长度、计数、Index3.字符串常用方法3.1判断类型3.2查找和替换3.3文本对齐3.4去除空白字符.strip()4.字符串的拆分和拼接5.字符串的切片6.跨行字符串7.包含转义字符r8.字符串的分割与连接9.Unicode字符串字符串-不变…

机器学习中的距离和损失函数

文章目录13.1 距离度量13.2 损失函数13.1 距离度量 距离函数种类:欧式距离、曼哈顿距离、明式距离(闵可夫斯基距离)、马氏距离、切比雪夫距离、标准化欧式距离、汉明距离、夹角余弦等常用距离函数:欧式距离、马氏距离、曼哈顿距离…

Python(20)-高级数据类型的公共方法

高级数据类型的公共方法1内置函数2高级数据类型切片3运算符,*,in4完整的for循环公共方法是列表,元组,字典,字符串都能使用的方法1内置函数 内置函数:不需要import导入模块,就可以直接使用的函数…

redis——为什么选择了跳表而不是红黑树?

跳表是个啥东西请看这个文章。 我们知道,节点插入时随机出一个层数,仅仅依靠一个简单的随机数操作而构建出来的多层链表结构,能保证它有一个良好的查找性能吗?为了回答这个疑问,我们需要分析skiplist的统计性能。 在…

机器学习公式推导

文章目录线性回归逻辑回归线性判别分析PCAk-means决策树svm随机深林GBDTxgboost强化学习MapReduce线性回归 逻辑回归 对于分类问题:输出0/1,超过[0,1]没有意义,使用sigmoid函数 **代价函数:**使用L2平方差,由于模型函…

Python综合应用(1)--名片管理系统开发

第一个综合应用-名片管理系统1框架搭建2完善功能综合应用,名片管理系统 欢迎界面,不同选项,1.新建名片,2.显示全部,3 查询名片(查到之后可以修改名片信息),0 退出系统 程序开发流程…

springboot1——spring相关入门

spring 随着我们开发,发现了一个问题: A---->B---->C---->D 在A中创建B的对象调用B的资源 在B中创建C的对象调用C的资源 在C中创建D的对象调用…

大数据学习(06)-- 云数据库

文章目录目录1.什么是云数据库?1.1 云计算和云数据库的关系1.2 云数据库的概念1.3 云数据库的特性1.4 云数据库应用场景1.5 云数据库和其他数据的关系2.云数据库产品有哪些?2.1 云数据库厂商概述2.2 亚马逊云数据库产品2.3 Google云数据库产品2.4 微软云…

Python(21)--变量进阶

变量的进阶使用1变量引用2可变、不可变数据类型3局部变量和全局变量4.Tips本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html在博文:https://blog.csdn.net/sinat_40624829/articl…

机器学习知识总结系列-机器学习中的数学-矩阵(1-3-2)

矩阵 SVD 矩阵的乘法状态转移矩阵状态转移矩阵特征值和特征向量 对称阵 正交阵 正定阵数据白化矩阵求导 向量对向量求导 标量对向量求导 标量对矩阵求导一.矩阵1.1 SVD奇异值分解(Singular Value Decomposition),假设A是一个mn阶矩阵&#xf…

面试中海量数据处理总结

教你如何迅速秒杀掉:99%的海量数据处理面试题 前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获&…

redis——旧版复制

Redis 的复制功能分为同步(sync)和命令传播(command propagate)两个操作: 同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。命令传播操作用于在主服务器的数据库状态被修改, 导致…

Linux(3)-网-ifconfig,ping,ssh

终端命令网-ping,ssh1. ifconfig -a2. ping3. ssh3.1安装3.2 连接3.3 配置登入别名防火墙端口号,todo1. ifconfig -a 查看IP地址, 还可以用于配置网口。 ifconfig -a 2. ping ping命令: 检测到IP地址的连接是否正常。命令开始后由本机发送数据包a&…

redis——相关问题汇总

什么是redis? Redis 本质上是一个 Key-Value 类型的内存数据库, 整个数据库加载在内存当中进行操作, 定期通过异步操作把数据库数据 flush 到硬盘上进行保存。 因为是纯内存操作, Redis 的性能非常出色, 每秒可以处理…

一文搞定面试中的二叉树问题

一文搞定面试中的二叉树问题 版权所有,转载请注明出处,谢谢! http://blog.csdn.net/walkinginthewind/article/details/7518888 树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点…

无数踩坑系列(1)--Brightness Controller

Brightness Controller1.尝试找回系统自带亮度调节条1.1 配置grub文件,无效1.2 使用命令调节屏幕亮度,无效2.安装应用程序Brightness Controller2.1许多博文都写出了如下方案,无效:2.2 github 手动安装https://github.com/LordAmi…