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

Pytorch(3)-数据载入接口:Dataloader、datasets相关推荐

  1. Pytorch数据读取(Dataset, DataLoader, DataLoaderIter)

    Pytorch的数据读取主要包含三个类: Dataset DataLoader DataLoaderIter 这三者是一个依次封装的关系: 1.被装进2., 2.被装进3. Dataset类 Pyto ...

  2. 【YOLO-V3-SPP 源码解读】三、数据载入(数据增强)

    以下的全部内容都是yolov3_spp源码的数据载入(数据增强)部分 下面的所有的内容都是按照代码执行的顺序进行讲解的 自定义数据集 继承自Dataset 所以要重写__len()__,__getit ...

  3. PyTorch:数据加载,数学原理,猫鱼分类,CNN,预训练,迁移学习

    1,数据加载 PyTorch开发了与数据交互的标准约定,所以能一致地处理数据,而不论处理图像.文本还是音频.与数据交互的两个主要约定是数据集(dataset)和数据加载器(dataloader).数据 ...

  4. opencv、matplotlib、pillow和pytorch读取数据的通道顺序

    文章目录: 1 opencv读取数据的通道顺序 1.1 opencv读取数据相关说明 1.2 显示opencv读取的数据 1.3 把opencv读取的BGR转换RGB的三种方式 2 matplotli ...

  5. matlab 读取csv_利用Pytorch进行数据加载1--CSV文件的读取和显示

    import os # 文件处理模块,用于处理文件和目录 import torch # pytorch的深度学习框架 import pandas as pd #人脸识别库 from skimage i ...

  6. 数据载入过慢?这里有一份TensorFlow加速指南

    王小新 编译自 Towards Data Science 量子位 出品 | 公众号 QbitAI 机器学习算法烂熟于心,网络结构顺手拈来,但是如果数据集载入时耗费大量时间,那整个训练时间就会大大增加. ...

  7. 【读书笔记】《利用Python进行数据分析》第2版_第六章 数据载入、存储及文件格式

    6.1 文本格式数据的读写 将表格型数据读取为DataFrame对象:read_csv()和read_table() Pandas的解析函数 可选参数 索引:可以将一或多个列作为返回的DataFram ...

  8. Fast RCNN 训练自己数据集 (2修改数据读取接口)

    Fast RCNN 训练自己数据集 (2修改数据读取接口) Fast RCNN训练自己的数据集 (2修改读写接口) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.co ...

  9. pytorch实现数据增强的原理

    pytorch的数据增强功能并非是事先对整个数据集进行数据增强处理,而是在从dataloader中获取训练数据的时候(获取每个epoch的时候)才进行数据增强. 举个例子,如下面的数据增强代码: tr ...

最新文章

  1. 消息队列系列(二):.Rabbitmq的使用及Web监控工具使用
  2. python123第九周测验答案2020_运用python123平台助力编程课教学
  3. 老大难的分布式锁与幂等性问题,如何解决?长文干货!
  4. 2017/Province_Java_B/3/承压计算
  5. [转]JS对JSON的操作总结
  6. nvidia控制面板点了没反应win7_n卡控制面板没有显示选项修复方法_win7系统nvidia控制面板没有显示选项最佳设置...
  7. 华为网络篇 传输文件-08
  8. c语言编写比赛评分程序,比赛评分系统c语言课程设计.doc
  9. Dell服务器组建阵列-Raid(有阵列卡)
  10. linux 的tac命令,每天学一个 Linux 命令(102):tac
  11. NFTScan x TiDB丨一栈式 HTAP 数据库为 Web3 数据服务提供毫秒级多维查询
  12. html是什么1003无标题,爱特漫画1003无标题
  13. 客户端呼叫Flash Medis Server3服务端入门
  14. 经济学模型1-循环流向图
  15. PgSQL · 最佳实践 · 双十一数据运营平台订单Feed数据洪流实时分析方案
  16. 小黑算法成长日记8:最优多边形环状运算(加法和乘法)
  17. scrapy之feeds
  18. 0.3 - 非标设备常用材料
  19. 【不入流】C语言,冒泡排序
  20. 选择困难症--dfs

热门文章

  1. open函数中O_CLOEXEC标志的开关
  2. You must install 'msgfmt' on your build machine
  3. YUV422格式信号格式(以备学习之用)
  4. java判断tcp是否阻塞_connect()调用在TCP堆栈中是非阻塞的(java)是什么意思
  5. vscode 逗号不换行_来自一个插件的疯狂夸赞,VS Code「彩虹屁」插件问世,网友:我想要郭德纲版...
  6. php中的address,html中address是什么意思?(代码示例)
  7. python什么是空类型_在Python中创建真正的空类型
  8. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系**
  9. html访问虚拟目录路径,IIS7.5虚拟目录物理路径指向共享文件夹详解
  10. java中的jgroup_JGroups实现聊天小程序