Pytorch数据载入函数介绍_torchvision.transforms.functional.erase()-程序员宅基地

技术标签: Pytorch  人工智能  pytorch  

Pytorch02——数据载入

参考:https://pytorch.org/docs/stable/data.html

本文主要是对Pytorch数据载入方式的官方文档翻译,以及梳理和总结。有错误的地方请诸位大佬指正!转载请注明来源!

主要涉及Python API中的torch.utils.data,Libraries库中的torchvision.datasets及torchvision.transforms。

目录

Pytorch02——数据载入

torch.utils.data.DataLoader

torchvision.datasets

torchvision.transforms

总结


torch.utils.data.DataLoader

torch.utils.data.DataLoader作为Pytorch数据载入工具的核心,代表了一种使用python迭代式载入数据的方式,并支持:

  1. 映射式和迭代式的数据集
  2. 自定义数据载入顺序
  3. 自动批处理
  4. 单线程或多线程的数据加载
  5. 自动内存锁页

这些选项可由DataLoader构造器的参数指定:

DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,
           batch_sampler=None, num_workers=0, collate_fn=None,
           pin_memory=False, drop_last=False, timeout=0,
           worker_init_fn=None, *, prefetch_factor=2,
           persistent_workers=False)

下面详细描述这些参数的使用方法和效果。

  • Dataset Types(数据集类型)

dataset是DataLoader最重要的参数,制定了要加载的数据集对象类型。Pytorch支持两种不同类型的数据集:映射式数据集(map-style)、迭代式数据集(iterable-style)。

映射式数据集包含了__getitem__()和__len__()方法,使用了类似于字典格式的键值对映射关系,将索引(可能是非整型数据)映射到数据样本。比如通过dataset[idx]可以访问到第idx个图像以及其对应的标签。更多介绍在torch.utils.data.Dataset。

迭代式数据集是IterableDataset的一个实例,包含了__iter__()方法,类似于数据集的迭代器。适用于随机读取成本高甚至不可能的情况(内存很小),一个批处理的大小(batch size)取决于能够获取的数据。比如,以数据流的形式从远程服务器读取数据集,或者实时写入事件日志。更多介绍在torch.utils.data.IterableDataset。

注意,当使用IterableDataset进行多线程数据载入时,每个线程载入的数据集对象是相同的,会造成数据集重复,必须进行不同的配置。配置方法见IterableDataset文档。

  • Data Loading Order and Sampler(数据集载入顺序及采样)

对于迭代式的数据集,数据载入顺序完全由用户定义的迭代器控制,可以轻松实现块读取和动态设置批处理大小(使用yield语句控制一个batch size)。

对于映射式的数据集,torch.utils.data.Sampler可以用于指定数据集索引的顺序,是数据集索引的迭代器。比如,使用随机梯度下降(SGD),Sampler可以随机的置换数据集索引列表,并且使用yield语句每次输出一个索引,或者使用yield语句每次输出一小批索引用于实现min-batach SGD。

shuffle参数的值,可以控制顺序载入数据(False),还是随机载入数据(True)。此外,用户也可以使用sampler参数指明自定义的Sampler对象,该对象每次都会产生要提取的下一个索引。

自定义的Sampler每次产生的索引列表可以传递到batch_sampler参数,自动批处理也可以通过设置batch_size及drop_last开启。

注意:sampler和batch_sampler都和迭代式的数据集不兼容,因为迭代式的数据集没有索引。

  • Loading Batched and Non-Batched Data(载入批处理和非批处理的数据集)

通过batch_size,drop_last,batch_sampler三个参数的指定,DataLoader可以自动将独立获取的数据样本整理成批处理格式。

默认自动批处理,因为这是最常见的方式,一般批处理后向量的第一维是批处理序号。batch_size默认为1,而不是None,batch_size和drop_last参数可以用户指定如何获取一个批处理中的数据集索引。对于映射式的数据集,用户可以选择指定batch_sampler,每次产生一个数据集索引列表。

注意,batch_size,drop_last本质上是用于从sampler构建一个batch_sampler。对于映射式的数据集,sampler由用户构建或者基于shuffle参数构建。对于迭代式数据集,sampler是一个虚拟的无限数据集。当使用多线程载入迭代式的数据集时,drop_last参数可以丢弃每个线程最后一个非完整批次。

当使用sampler得到样本的索引列表后,collate_fn参数将索引对应的数据整理为一个批次。这种情况下,从映射式的数据集载入可以表示为:

for indices in batch_sampler:
    yield collate_fn([dataset[i] for i in indices])

从迭代式的数据集载入可以表示为:

dataset_iter = iter(dataset)
for indices in batch_sampler:
    yield collate_fn([next(dataset_iter) for _ in indices])

自定义的collate_fn可以用于自定义数据集整理,比如批次不完整时,自动复制补全。

禁用自动批处理,在某些情况下,用户可能希望手动进行批处理,或仅加载单个样本。例如,直接加载批处理过的数据&

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/godblesstao/article/details/110194949

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签