如何使用数据集DataSet?

在介绍DataLoader之前,需要先了解数据集DataSet的使用。Pytorch中集成了很多已经处理好的数据集,在pytorch的torchvision、torchtext等模块有一些典型的数据集,可以通过配置来下载使用。

以CIFAR10 数据集为例,文档已经描述的很清晰了,其中要注意的就是transform这个参数,可以用来将图像转换为所需要的格式,就比如这样,将PIL格式的图像转化为tensor格式的图像:

# 准备的测试数据集
test_data=torchvision.datasets.CIFAR10("dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)

DataLoader是什么?

我们可以这样理解:如果Dataset数据集是一个存储所有数据(图像、音频)的容器,那么DataLoader就是另一个具有更好收纳功能的容器,其中分隔开来很多小隔间,可以自己设定一个小隔间有多少个数据集的数据来组成,每次将数据放进收纳小隔间的时候要不要把源数据集打乱再进行收纳等等

也就是说,给定了一个数据集,我们可以决定如何从数据集里面拿取数据来进行训练,比如一次拿取多少数据作为一个对象来对数据集进行分割,对数据集进行分割之前要不要打乱数据集等等。DataLoader的结果就是一个对数据集进行分割的大字典列表,列表中的每个对象都是由设置的多少个数据集的对象组合而成的

如何使用DataLoader?

__getitem__方法

首先需要先理解__getitem__方法,__getitem__被称为魔法方法,在python中定义一个类的时候,如果想要通过键来得到类的输出值,就需要__getitem__方法。所以__getitem__方法的作用就是在调用类的时候自动的运行__getitem__方法的内容,得结果并返回

class Fib():                  #定义类Fib
def __init__(self,start=0,step=1):
self.step=step
def __getitem__(self, key): #定性__getitem__函数,key为类Fib的键
a = key+self.step
return a #当按照键取值时,返回的值为a s=Fib()
s[1] #返回2 ,因为类有 __getitem__方法,所以可以直接通过键来取对应的值

如果没有__getitem__方法,那么就无法通过键来得到返回值

class Fib():                  #定义类Fib
def __init__(self,start=0,step=1):
self.step=step
s=Fib()
s[1]
返回:TypeError: 'Fib' object does not support indexing

以Pytorch中的CIFAR10数据集为例,可以看到源码中的__getitem__方法是这样的:

    def __getitem__(self, index: int) -> Tuple[Any, Any]:
"""
Args:
index (int): Index Returns:
tuple: (image, target) where target is index of the target class.
"""
img, target = self.data[index], self.targets[index] # doing this so that it is consistent with all other datasets
# to return a PIL Image
img = Image.fromarray(img) if self.transform is not None:
img = self.transform(img) if self.target_transform is not None:
target = self.target_transform(target) return img, target

可以理解为在调用类的时候如果输入index,也就是这个类中的索引/键,那么就可以自动调用__getitem__方法得到返回值image和target,其中image就是数据集中的图像,target是标签类class中的索引,用来指示label是什么

DataLoader语法

可以在Pytorch的Documents文档中查看DataLoader的使用方法,一部分截图如下所示

这里介绍几个比较常用的:

  • dataset:就是我们的数据集,我们构建好数据集对象之后传入即可

  • batch_size:也就是在数据集容器中一次拿取多少数据,然后这一次拿取的数据就作为一个Dataloader中的一个对象。如果还是不太理解,可以看下面的示例:

    第一张图片是我设置batch_size=4的时候给出的DataLoader中的一个对象,第二张图片是batch_size=64的时候给出的DataLoader中的一个对象,这样就好理解了~





    在这里也可以很清楚的看出来,数据集是10000张图像/对象,设置batch_size=4之后DataLoader中就是2500个对象了

  • shuffle:是否在每次操作的时候打乱数据集,一般选择为True。更好的理解就是,如果设置为true,那么第一次创建DataLoader对象中的每个小对象和第二次DataLoader对象中的小对象是不相同的,因为在每次创建DataLoader的时候就会先把数据集打乱,自然得到的DataLoader也就不一样

  • num_workers:多线程进行拿取数据操作,0表示只在主线程中操作,一般来讲windows系统下用多线程会报错,设置为0即可

  • drop_last:如果拿取数据有余数,是否保留最后剩下的部分。如果为True的话,最后剩下的部分被丢弃,为false的话最后剩下的部分不会被丢弃

例如在后面的代码中,如果我设置drop_last=False,那么一共有156次数据拿取,并且最后一次剩余的部分不会被丢弃



如果设置drop_last=True,那么最后剩余的部分被丢弃,并且拿取次数也少了一次

使用DataLoader

初步使用的代码如下:

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter # 准备的测试数据集
test_data=torchvision.datasets.CIFAR10("dataset",train=False,transform=torchvision.transforms.ToTensor())
# 加载Dataloader
test_dataloader=DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=True)
# 加载tensorboard
writer=SummaryWriter("logs")
# tensorboard中的图片序号
step=0
for data in test_dataloader:
images,targets=data
writer.add_images("test_03",images,step)
step=step+1
writer.close()

然后配合使用tensorboard就可以直观体会到它的使用方法了~

深度学习入门笔记——DataLoader的使用的更多相关文章

  1. PyTorch深度学习入门笔记(一)PyTorch环境配置及安装

    @ 目录 一.工具安装 1.1 Anaconda 安装 1.2 Pytorch安装 二.编辑器安装 2.1 Pycharm安装 2.2 Jupyter安装 OS: ubuntu 20.04(虚拟机) ...

  2. 深度学习课程笔记(一)CNN 卷积神经网络

    深度学习课程笔记(一)CNN 解析篇 相关资料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html 首先提到 Why CNN for I ...

  3. 深度学习入门者的Python快速教程 - 基础篇

      5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...

  4. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  5. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  6. 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇

    始终无法有效把word排版好的粘贴过来,排版更佳版本请见知乎文章: https://zhuanlan.zhihu.com/p/24309547 实在搞不定博客园的排版,排版更佳的版本在: 给深度学习入 ...

  7. 深度学习word2vec笔记之算法篇

    深度学习word2vec笔记之算法篇 声明:  本文转自推酷中的一篇博文http://www.tuicool.com/articles/fmuyamf,若有错误望海涵 前言 在看word2vec的资料 ...

  8. 深度学习入门实战(二)-用TensorFlow训练线性回归

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :董超 上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能 ...

  9. (转)深度学习word2vec笔记之基础篇

    深度学习word2vec笔记之基础篇 声明: 1)该博文是多位博主以及多位文档资料的主人所无私奉献的论文资料整理的.具体引用的资料请看参考文献.具体的版本声明也参考原文献 2)本文仅供学术交流,非商用 ...

  10. 深度学习word2vec笔记之基础篇

    作者为falao_beiliu. 作者:杨超链接:http://www.zhihu.com/question/21661274/answer/19331979来源:知乎著作权归作者所有.商业转载请联系 ...

随机推荐

  1. 汇编跳转指令B、BL、BX、BLX 和 BXJ的区别

    跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转: (1) 使用专门的跳转指令. (2) 直接向程序计数器 PC 写入跳转地址值. 通过向程序计数器 PC 写入跳转地 ...

  2. Linux 主流图形显示系统

    在 Linux 系统中,主流的图形显示系统主要有以下几种: X Window System (X11) 简介 X Window System,通常简称为 X 或 X11,是历史最悠久.最广泛使用的图形 ...

  3. 【Mac】之本地连接虚拟机linux环境

    上一篇安装完centos虚拟机之后,如何远程连接呢? 先进入虚拟机的界面: 发现没有bash 终端输入: # -bash :telnet:command not found # 发现是虚拟机没有安装 ...

  4. Kubernetes-6:Pod生命周期介绍(init Container)

    Pod生命周期 生命周期 1.API server调用kubelet下达Pod创建指令 2.容器环境初始化 3.进入Pod生命周期内(Pod开始创建) 4.Pod只要创建,就会自动生成一个pause容 ...

  5. Https通信的SSL证书工作流程原理(转)

    前言 浏览器与服务器之间的https加密通信会包括以下一些概念:非对称加密.对称加密.RSA.证书申请.根证书.https证书加密,就是在传输层tcp和应用层http之间加了一层ssl层来对传输内容进 ...

  6. SSH 安全机制 及常见问题

    常见问题: ssh_dispatch_run_fatal: Connection to {your_ip} port 22: invalid argument ssh -oKexAlgorithms= ...

  7. 消息队列的对比测试与RocketMQ使用扩展

    消息队列的对比测试与RocketMQ使用扩展     本文的主要内容包括以下几个方面: 原有的消息技术选型 RocketMQ与kafka 测试对比 如何构建自己的消息队列服务 RocketMQ扩展改造 ...

  8. MMDetection

    安装了mmdetection,想跑一下有几篇文章的工作.总觉得发展很快,一转眼几年时间,好多东西都变了.可再仔细看,感觉又没变啥,还是faster rcnn, ssd, yolo等,这几年变化的主要是 ...

  9. CTC联结时间分类算法: 连接主义时间分类: 用递归神经网络标记未分割序列数据《Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks》(语音、文本识别、RNN端到端训练序列数据的方法)

    11月6号例会汇报. 糊弄的看了一个算法-CTC算法,没有汇报论文,因为没看论文(我导知道后,应该会锤死我...) 当然,汇报完之后,被我导腾讯会议通过网线批了我一顿,PPT做的太烂了!字太多,听不到 ...

  10. MDC – Material Design, Angular Material, MDC, MWC, Lit 的关系

    前言 它们关系挺乱的, 而且不只是我一个人感觉乱 还有 所以这篇做一个整理吧. Material Design Google 的设计指南. 早年用于 Android Apps, 现在也用于 Web A ...