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 ...
随机推荐
- golang开发:环境篇(三)开发利器Goland安装
这节主要介绍下golang开发的最主要的IDE,Goland.可以有效提高开发效率.用过一段时间 IntelliJ+GO插件,其实功能上跟goland差不多.不过团队的其它开发者基本都是Goland, ...
- F12 Preserve log 查看之前的api接口返回数据,只有火狐浏览器能用
F12 Preserve log 查看之前的api接口返回数据,只有火狐浏览器能用
- 基于BES2500芯片的低功耗蓝牙BLE游戏手柄解决方案源码解析
一 往事 寒冬腊月,在一个寂静的天空飘着碎银雪花的夜晚.我接到这么一个电话:"朋友,能否帮忙开发一个游戏手柄的案子?我们遇到了一些问题,迟迟无法解决.",喔,这边我陷入了沉思 ...
- 精通 Grails: 测试 Grails 应用程序
排除 bug,构建可执行文档 Grails 可以轻松确保您的应用程序从始至终都远离 bug.这还有另一个好处,您可以利用测试代码生成一组通常是最新的可执行文档.本月 Grails 专家 Scott D ...
- [剑指 Offer II 114. 外星文字典] 拓扑排序
import java.util.*; class Solution { public static void main(String[] args) { Solution solution = ne ...
- Java valueOf() 方法---->摘抄
valueOf(boolean b): 返回 boolean 参数的字符串表示形式.. valueOf(char c): 返回 char 参数的字符串表示形式. valueOf(char[] data ...
- 从零搭建react+ts组件库(二)less模块化与svg引入配置
在上一篇<从零搭建react+ts组件库(一)项目搭建与封装antd组件>介绍了使用webpack来搭建一个基于antd的组件库的基本框架,但是作为一个组件库,实际上还有很多的都还未引入, ...
- 【LeetCode刷题】剑指Offer 48.最长不含重复字符的子字符串
剑指Offer 48.最长不含重复字符的子字符串(点击跳转LeetCode) 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcab ...
- 记录--uniapp中生成二维码并展示
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 uniapp生成二维码并展示 1.下载weapp-qrcode.js文件并放在utils文件中链接: https://pan.baidu. ...
- ContiPerf是一个轻量级的测试工具,基于JUnit 4 开发,可用于效率测试等。
1.在maven中使用ContiPerf <dependency> <groupId>junit</groupId> <artifactId>junit ...