Pytorch Dataset入门
Dataset入门
Pytorch Dataset code:torch/utils/data/dataset.py#L17
Pytorch Dataset tutorial: tutorials/beginner/basics/data_tutorial.html
理论:
PyTorch中的Dataset
是一个抽象类,用来表示数据集的接口,所有其他数据集都需要继承这个类,并且覆写以下三个方法:
__init__:初始化数据集的一些配置,例如加载所有的数据标签。
__len__:以便
len(dataset)
可以返回数据集的大小,例如n。如果n小于数据集长度,则只会取前n个的数据。__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
实现的。通常情况下,我们会将Dataset
和DataLoader
一起使用。
另外,PyTorch还提供了一些常用的数据集,如:ImageFolder
,CIFAR10
,MNIST
等,这些数据集都是继承Dataset
类,同时在init
方法中进行数据的下载,以及在getitem
方法中进行数据的加载和预处理。
Dataset是单线程读取数据,每次只能读取一个样本,不能一次性读取一个mini-batch的数据。
Dataset的主要特性包含:
抽象接口:PyTorch通过定义一个抽象
Dataset
类,让用户可以使用统一的方式来加载各种不同的数据,提供了很好的扩展性。懒加载:实际的数据载入并不发生在构造数据集实例时,而是发生在用到这些数据时,这样可以提高内存利用率,并且可以实现对大规模数据的处理。
预处理:
Dataset
的一个重要应用就是数据预处理,你可以在getitem
函数中进行任何你的数据预处理过程。
嗨,欢迎大家关注我的公众号《CV之路》,一起讨论问题,一起学习进步~
Pytorch Dataset入门的更多相关文章
- 《深度学习框架PyTorch:入门与实践》读书笔记
https://github.com/chenyuntc/pytorch-book Chapter2 :PyTorch快速入门 + Chapter3: Tensor和Autograd + Chapte ...
- 【笔记】PyTorch快速入门:基础部分合集
PyTorch快速入门 Tensors Tensors贯穿PyTorch始终 和多维数组很相似,一个特点是可以硬件加速 Tensors的初始化 有很多方式 直接给值 data = [[1,2],[3, ...
- 《深度学习框架PyTorch:入门与实践》的Loss函数构建代码运行问题
在学习陈云的教程<深度学习框架PyTorch:入门与实践>的损失函数构建时代码如下: 可我运行如下代码: output = net(input) target = Variable(t.a ...
- pytorch怎么入门学习
pytorch怎么入门学习 https://www.zhihu.com/question/55720139
- pytorch从入门到放弃(目录)
目录 前置基础 Pytorch从入门到放弃 推荐阅读 前置基础 Python从入门到放弃(目录) 人工智能(目录) Pytorch从入门到放弃 01_pytorch和tensorflow的区别 02_ ...
- Pytorch Dataset和Dataloader 学习笔记(二)
Pytorch Dataset & Dataloader Pytorch框架下的工具包中,提供了数据处理的两个重要接口,Dataset 和 Dataloader,能够方便的使用和加载自己的数据 ...
- 图神经网络 PyTorch Geometric 入门教程
简介 Graph Neural Networks 简称 GNN,称为图神经网络,是深度学习中近年来一个比较受关注的领域.近年来 GNN 在学术界受到的关注越来越多,与之相关的论文数量呈上升趋势,GNN ...
- 识别手写数字增强版100% - pytorch从入门到入道(一)
手写数字识别,神经网络领域的“hello world”例子,通过pytorch一步步构建,通过训练与调整,达到“100%”准确率 1.快速开始 1.1 定义神经网络类,继承torch.nn.Modul ...
- Pytorch dataset自定义【直播】2019 年县域农业大脑AI挑战赛---数据准备(二),Dataset定义
在我的torchvision库里介绍的博文(https://www.cnblogs.com/yjphhw/p/9773333.html)里说了对pytorch的dataset的定义方式. 本文相当于实 ...
- pytorch Dataset Dataloader用法(一个示例)
from torch.utils.data import Dataset from torch.utils.data import DataLoader from torch.utils.data i ...
随机推荐
- 修改html5 placeholder文字默认颜色
注意: 1.input后面的冒号不要写错! 2.-moz后面是没有input字样,火狐设置字体颜色为#000,但是他不是全黑,好像有个度似的!(个人认为) input:-ms-input-placeh ...
- ie7bug,一个块级元素或者一个行内元素里面有个子元素设置向右边浮动,在IE7会出现元素下掉现象!
元素包含结构如下: <h1>testing<span>综合评级:<em></em></span></h1> CSS,如下 h1{ ...
- Zabbix MQQT协议监控 loT设备
一. 项目背景 监控异地局域网主机(主机内有物联5G卡 可以单方面向特定的云服务器传输信息)这里采用 zabbix 5xx系列 agent2 -6.2 版本 主动模式,即客户端向服务端注册. 二. ...
- C语言中的强制转换
许久没有遇到的问题 C语言真是博大精深,越使用它,就越发感觉到它的威力和恐怖,最近在做算法的时候,遇到了一个强转的错误,把人折腾的够受,这次要好好梳理一下了,希望下次不能再犯此类的问题. 强制转换 ...
- posix API的一些理解
TCP Posix API的理解 我们主要从TCP连接讲解整个的流程. 连接的建立 消息的收发 连接的断开 连接的建立 先看一下一个TCP server的创建过程. #include<stdio ...
- day08-Java数组
Java数组 1.数组概述 数组的定义: 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 其中每一个数据称作一个数组元素,每个数组元素可以通过一个下标来 ...
- Android USB开发1—开发环境搭建
通过Genymotion 与 VirtualBox 可以实现将电脑中的USB设备转接到Android模拟器中进行通信. Genymotion 配置 首先从https://www.genymotion. ...
- 修复华硕笔记本fn+f2在ubuntu下wifi不能够正常使用和WiFi Disabled (Hard-blocked) (译文)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文发布于 2014-12-22 11:49:16 ...
- Python编程规范+最佳实践
前言 Python之禅是影响Python编程语言设计的19条原则,也是Python编码规范的核心理念. 优美胜于丑陋(Python 以编写优美的代码为目标) 明了胜于晦涩(优美的代码应当是明了的,命名 ...
- 记录--微信小程序,uniapp,H5端发送,显示emoji表情
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 小伙伴们,在开发中有没有遇到过发布帖子或者实时聊天需要发送到一些emoji表情的. 但是每当我们直接将emoji表情提交到后台的接口又会报 ...