Dataset入门

Pytorch Dataset code:torch/utils/data/dataset.py#L17

Pytorch Dataset tutorial: tutorials/beginner/basics/data_tutorial.html

理论:

PyTorch中的Dataset是一个抽象类,用来表示数据集的接口,所有其他数据集都需要继承这个类,并且覆写以下三个方法:

  1. __init__:初始化数据集的一些配置,例如加载所有的数据标签。

  2. __len__:以便len(dataset)可以返回数据集的大小,例如n。如果n小于数据集长度,则只会取前n个的数据。

  3. __getitem__:输入是数据的索引,以便可以使用dataset[i]来获取第i个样本,数据增强一般会在这里做。

代码:

下面是一个自定义的Dataset样例(不可执行):

import cv2
import json
import torch.utils.Dataset as Dataset class CustomDataset(Dataset):
def __init__(self, imgs_path, labels_path, img_transform=None, label_transform=None):
self.imgs_path = imgs_path # 输入图像的路径,list
self.labels_path = labels_path # 输入图像对应的标签路径,list
self.img_transform = img_transform # 图像的数据增强
self.label_transform = label_transform # 标签的数据增强 def __len__(self):
return len(self.imgs_path) # 返回数据集的长度 def __getitem__(self, idx):
img_path = self.imgs_path[idx]
label_path = self.labels_path[idx]
img = cv2.imread(img_path) # 读取图像
label = json.load(open(label_path)) # 读取标签
if self.img_transform: # 图像的数据增强
img = self.img_transform(img)
if self.label_transform: # 标签的数据增强
label = self.label_transform(label)
return img, label # 返回图像和标签,用于训练

总结:

值得注意的是,Dataset只负责数据的加载和预处理,对于如何训练数据(例如:是否进行shuffle,是否进行并行加速等)这部分的逻辑是由DataLoader实现的。通常情况下,我们会将DatasetDataLoader一起使用。

另外,PyTorch还提供了一些常用的数据集,如:ImageFolderCIFAR10MNIST等,这些数据集都是继承Dataset类,同时在init方法中进行数据的下载,以及在getitem方法中进行数据的加载和预处理。

Dataset是单线程读取数据,每次只能读取一个样本,不能一次性读取一个mini-batch的数据。

Dataset的主要特性包含:

  • 抽象接口:PyTorch通过定义一个抽象Dataset类,让用户可以使用统一的方式来加载各种不同的数据,提供了很好的扩展性。

  • 懒加载:实际的数据载入并不发生在构造数据集实例时,而是发生在用到这些数据时,这样可以提高内存利用率,并且可以实现对大规模数据的处理。

  • 预处理:Dataset的一个重要应用就是数据预处理,你可以在getitem函数中进行任何你的数据预处理过程。


嗨,欢迎大家关注我的公众号《CV之路》,一起讨论问题,一起学习进步~

Pytorch Dataset入门的更多相关文章

  1. 《深度学习框架PyTorch:入门与实践》读书笔记

    https://github.com/chenyuntc/pytorch-book Chapter2 :PyTorch快速入门 + Chapter3: Tensor和Autograd + Chapte ...

  2. 【笔记】PyTorch快速入门:基础部分合集

    PyTorch快速入门 Tensors Tensors贯穿PyTorch始终 和多维数组很相似,一个特点是可以硬件加速 Tensors的初始化 有很多方式 直接给值 data = [[1,2],[3, ...

  3. 《深度学习框架PyTorch:入门与实践》的Loss函数构建代码运行问题

    在学习陈云的教程<深度学习框架PyTorch:入门与实践>的损失函数构建时代码如下: 可我运行如下代码: output = net(input) target = Variable(t.a ...

  4. pytorch怎么入门学习

    pytorch怎么入门学习 https://www.zhihu.com/question/55720139

  5. pytorch从入门到放弃(目录)

    目录 前置基础 Pytorch从入门到放弃 推荐阅读 前置基础 Python从入门到放弃(目录) 人工智能(目录) Pytorch从入门到放弃 01_pytorch和tensorflow的区别 02_ ...

  6. Pytorch Dataset和Dataloader 学习笔记(二)

    Pytorch Dataset & Dataloader Pytorch框架下的工具包中,提供了数据处理的两个重要接口,Dataset 和 Dataloader,能够方便的使用和加载自己的数据 ...

  7. 图神经网络 PyTorch Geometric 入门教程

    简介 Graph Neural Networks 简称 GNN,称为图神经网络,是深度学习中近年来一个比较受关注的领域.近年来 GNN 在学术界受到的关注越来越多,与之相关的论文数量呈上升趋势,GNN ...

  8. 识别手写数字增强版100% - pytorch从入门到入道(一)

    手写数字识别,神经网络领域的“hello world”例子,通过pytorch一步步构建,通过训练与调整,达到“100%”准确率 1.快速开始 1.1 定义神经网络类,继承torch.nn.Modul ...

  9. Pytorch dataset自定义【直播】2019 年县域农业大脑AI挑战赛---数据准备(二),Dataset定义

    在我的torchvision库里介绍的博文(https://www.cnblogs.com/yjphhw/p/9773333.html)里说了对pytorch的dataset的定义方式. 本文相当于实 ...

  10. pytorch Dataset Dataloader用法(一个示例)

    from torch.utils.data import Dataset from torch.utils.data import DataLoader from torch.utils.data i ...

随机推荐

  1. 修改html5 placeholder文字默认颜色

    注意: 1.input后面的冒号不要写错! 2.-moz后面是没有input字样,火狐设置字体颜色为#000,但是他不是全黑,好像有个度似的!(个人认为) input:-ms-input-placeh ...

  2. ie7bug,一个块级元素或者一个行内元素里面有个子元素设置向右边浮动,在IE7会出现元素下掉现象!

    元素包含结构如下: <h1>testing<span>综合评级:<em></em></span></h1> CSS,如下 h1{ ...

  3. Zabbix MQQT协议监控 loT设备

    一. 项目背景 监控异地局域网主机(主机内有物联5G卡 可以单方面向特定的云服务器传输信息)这里采用 zabbix 5xx系列 agent2 -6.2 版本 主动模式,即客户端向服务端注册.   二. ...

  4. C语言中的强制转换

    许久没有遇到的问题   C语言真是博大精深,越使用它,就越发感觉到它的威力和恐怖,最近在做算法的时候,遇到了一个强转的错误,把人折腾的够受,这次要好好梳理一下了,希望下次不能再犯此类的问题. 强制转换 ...

  5. posix API的一些理解

    TCP Posix API的理解 我们主要从TCP连接讲解整个的流程. 连接的建立 消息的收发 连接的断开 连接的建立 先看一下一个TCP server的创建过程. #include<stdio ...

  6. day08-Java数组

    Java数组 1.数组概述 数组的定义: 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 其中每一个数据称作一个数组元素,每个数组元素可以通过一个下标来 ...

  7. Android USB开发1—开发环境搭建

    通过Genymotion 与 VirtualBox 可以实现将电脑中的USB设备转接到Android模拟器中进行通信. Genymotion 配置 首先从https://www.genymotion. ...

  8. 修复华硕笔记本fn+f2在ubuntu下wifi不能够正常使用和WiFi Disabled (Hard-blocked) (译文)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文发布于 2014-12-22 11:49:16 ...

  9. Python编程规范+最佳实践

    前言 Python之禅是影响Python编程语言设计的19条原则,也是Python编码规范的核心理念. 优美胜于丑陋(Python 以编写优美的代码为目标) 明了胜于晦涩(优美的代码应当是明了的,命名 ...

  10. 记录--微信小程序,uniapp,H5端发送,显示emoji表情

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 小伙伴们,在开发中有没有遇到过发布帖子或者实时聊天需要发送到一些emoji表情的. 但是每当我们直接将emoji表情提交到后台的接口又会报 ...