一文搞懂Pytorch数据读取机制!

Pytorch:数据读取机制(DataLoader与Dataset) 自定义类"""rmb面额分类任务的Dataset:param data_dir: str, 数据集所在路径:param transform: torch.transform,数据预处理"""self.data_info = self.get_img_info(data_dir) # data_info存储所有图片路径和标签,在DataLoader中通过index读取样本img = self.transform(img) # 在这里做transform,转为tensor等等# 遍历类别。 阅读详情

在这里插入图片描述

熟悉深度学习的小伙伴一定都知道:深度学习模型训练主要由数据、模型、损失函数、优化器以及迭代训练五个模块组成。如下图所示,Pytorch数据读取机制则是数据模块中的主要分支。

Pytorch数据读取是通过Dataset+Dataloader的方式完成。其中,

  • DataSet:定义数据集。将原始数据样本及对应标签映射到Dataset,便于后续通过index读取数据。同时,还可以在Dataset中进行数据格式变换、数据增强等预处理操作。

  • DataLoader:迭代读取数据集。将数据样本进行分批次Batch、打乱顺序Shuffle等处理,便于训练时迭代读取数据。

Dataset

Dataset用于解决数据从哪里读取以及如何读取的问题。 Pytorch给定的Dataset是一个抽象类,所有自定义的数据集都要继承Dataset,并重写__init__()、__getitem__()和__len__() 类方法,以供DataLoader类直接调用。

  • __init__:数据集初始化。

  • __getitem__:定义指定索引如何获取样本数据,最终返回index对应的样本对{样本数据x:标签y}。

  • __len__:数据集的样本数。

下面是以cifar10数据集为例实现Dataset自定义数据集的代码样例。

from torch.utils.data import Dataset  
from PIL import Image  
import os  
  
class Mydata(Dataset):  
    """  
    步骤一:继承 torch.utils.data.Dataset 类  
    """  
    def __init__(self,data_dir,label_dir):  
        """  
        步骤二:实现 __init__ 函数,初始化数据集,将样本和标签映射到列表中  
        """  
        self.data_dir = data_dir  
        self.label_dir = label_dir  
        # 用join把路径拼接一起可以避免一些因“/”引发的错误  
        self.path = os.path.join(self.data_dir,self.label_dir)  
        # 将该路径下的所有文件变成一个列表  
        self.img_path = os.listdir(self.path)  
  
    def __getitem__(self,idx):  
        """  
        步骤三:实现 __getitem__ 函数,定义指定 index 时如何获取数据,并返回单条数据(样本数据、对应的标签)  
        """  
        # 根据index(idx),从列表中取出图片  
        # img_path列表里每个元素就是对应图片文件名  
        img_name = self.img_path[idx]  
        # 获得对应图片路径  
        img_item_path = os.path.join(self.data_dir,self.label_dir,img_name)  
        # 使用PIL库下Image工具,打开对应路径图片  
        img = Image.open(img_item_path)  
        label = self.label_dir  
        # 返回图片和对应标签  
        return img,label  
  
    def __len__(self):  
        """  
        步骤四:实现 __len__ 函数,返回数据集的样本总数  
        """  
        return len(self.img_path)  
  
# data_dir,label_dir可自定义数据集目录  
train_custom_dataset = MyData(data_dir,label_dir)  
test_custom_dataset = MyData(data_dir,label_dir)  
  



DataLoader

在实际项目中,当数据量很大,考虑到内存有限、I/O速度等问题,训练中不可能一次性将所有数据加载到内存或者只用一个进行加载数据,此时就需要的是多进程、迭代加载,Dataloader便应运而生。

DataLoader是一个可迭代的数据装载器,组合了数据集和采样器,并在给定数据集上提供可迭代对象。可以完成对数据集中多个对象的集成。

Pytorch的数据读取机制中DataLoader模块包括Sampler和Dataset两个子模块,其中Sampler模块生成索引index;Dataset模块是根据索引读取数据。DataLoader读取数据流程如下图所示。

  • DataLoader:进入DataLoader模块。

  • DataloaderIter:进入__iter__函数判断是否采用多进程,并进入相应的读取机制。

  • Sampler:通过采样,挑选每个Batchsize该读取的数据,并返回这些数据的index。

  • index:一个batchsize数据的索引。

  • DatasetFetcher:获取index对应的数据。

  • Dataset:调用dataset[idx]获取相应数据,并拼接成list。

  • getitem:Dataset的核心,用索引获取数据。

  • img,label:读取到的数据。

  • collate_fn:将读取的数据从list转为batch形式。

  • Batch Data:batch形式数据,第一个元素是图像,第二个元素是标签。

Pytorch中DataLoader类定义如下:

class torch.utils.data.DataLoader(  
     """  
     构建可迭代的数据装载器,训练时,每一个for循环,每一次迭代,  
     从DataLoader中获取一个batch_size大小的数据  
     """  
     dataset,  
     batch_size=1,  
     shuffle=False,  
     sampler=None,  
     batch_sampler=None,  
     num_workers=0,  
     collate_fn=None,  
     pin_memory=False,  
     drop_last=False,  
)  



  • dataset:需要加载的数据集,Dataset对象。

  • batch_size:每批次读取样本数。例如batch_size=16表示每批次读取16个样本。

  • shuffle:每个epoch是否乱序。shuffle=True表示在取数据时打乱样本顺序,以减少过拟合发生的可能。

  • sampler:索引index。

  • batch_sampler:将返回一个索引的sampler进行包装,按照设定的batch_size返回一组索引。

  • num_workers:同步/异步读取数据。num_workers=0表示数据加载是同步的,在主进程中完成。num_workers的值设为大于0时,即开启多进程方式异步加载数据,可提升数据读取速度。

  • pin_memory:是否将数据拷贝到拷贝到临时缓冲区。

  • collate_fn:将多个样本组合在一起变成一个mini-batch,不指定该函数的话会调用Pytorch内部默认的函数。

  • drop_last:丢弃不完整的批次样本,drop_last=True表示当数据集样本数不能被batch_size整除时,则丢弃最后一个不完整的batch样本。

“

补充说明

Epoch:所有训练样本都已输入到模型中,称为一个epoch

Iteration:一批样本(batch_size)输入到模型中,称为一个Iteration。

Batchsize:一批样本的大小,称为Batchsize。用于决定一个epoch有多少个Iteration。

”

代码实现示例如下。

import torch  
import torch.utils.data as Data  
  
BATCH_SIZE = 5  
  
x = torch.linspace(1, 10, 10)  
y = torch.linspace(10, 1, 10)  
  
# 将数据集转换为torch可识别的类型  
torch_dataset = Data.TensorDataset(x, y)  
  
loader = Data.DataLoader(  
    dataset=torch_dataset,  
    batch_size=BATCH_SIZE,  
    shuffle=True,  
    num_workers=0  
)  
  
for epoch in range(3):  
    for step, (batch_x, batch_y) in enumerate(loader):  
        print('epoch', epoch,  
              '| step:', step,  
              '| batch_x', batch_x.numpy(),  
              '| batch_y:', batch_y.numpy())  



通过上述方法即可初始化一个数据读取器loader,用于加载训练数据集torch_dataset。

pytorch进阶学习(二):使用DataLoader读取自己的数据集 该方法为class loaddata的主方法,使用index下标获取到每一张图片的path和label后,用flag判断为训练集还是验证集,并且采用对应的图片处理措施(train_tf/val_tf)。课程准备:本节课需要用到3个Python文件和一个数据集文件,代码后面我都会给出,zip需要自己下载,,数据集zip文件和所需的三个代码文件可以在“leo在这”进行下载。'CreateDataset.py' 用于把数据集文件夹中的所有图片文件生成一个TXT文件,其中存放着所有图片的路径和图片对应的标签。 阅读详情

相关推荐

一文搞懂Pytorch数据读取机制

熟悉深度学习的小伙伴一定都知道:深度学习模型训练主要由数据、模型、损失函数、优化器以及迭代训练五个模块组成。如下图所示,Pytorch数据读取机制则是数据模块中的主要分支。Pytorch数据读取是通过Dataset+Dataloader的方式完成。其中,DataSet:定义数据集。将原始数据样本及对应标签映射到Dataset,便于后续通过index读取数据。同时,还可以在Dataset中进行数据格式变换、数据增强等预处理操作。DataLoader:迭代读取数据集。

2301_78094861的博客 691

Pytorch基础及实战(3)——深入浅出PyTorch数据读取机制

深入浅出Pytorch数据读取机制——Dataset和Dataloader

穿着帆布鞋也能走猫步 629

【PyTorch】数据读取和处理

return umg仅接收一个参数,返回一个参数注意上下游的输出与输入......return img。

Glass_Gun的博客 1305

Pytorch数据读取机制(DataLoader)

一、python读取机制 在学习Pytorch的数据读取之前,我们得先回顾一下这个数据读取到底是以什么样的逻辑存在的, 我们知道机器模型学习的五大模块,分别是数据,模型,损失函数,优化器,迭代训练。而这里的数据读取机制,很显然是位于数据模块的一个小分支,下面看一下数据模块的详细内容: 数据模块中,又可以大致分为上面不同的子模块, 而今天学习的DataLoader和DataSet就是数据读取子模块中的核心机制。 了解了上面这些框架,有利于把知识进行整合起来,到底学习的内容属于哪一块。下面正式开始Dat

周周周周周大帅的博客 1万+

PyTorch学习笔记02——Dataset&DataLoader数据读取机制

PyTorch学习笔记02——Dataset&DataLoader数据读取机制

weixin_53968757的博客 835

pytorch 数据的读取

pytorch 数据装载器dataloader ,以及超分辨率dataset的常规定义

qq_40107571的博客 2019

pytorch - 数据读取机制中的Dataloader与Dataset

1、人民币二分类 要求:将第四套人民币中的一元和一百元进行二分类; 怎么建立一个预测模型呢?考虑上一个博客中的机器学习模型训练五大步骤;第一是数据,第二是模型,第三是损失函数,第四是优化器,第五个是迭代训练过程。 这里主要学习数据模块当中的数据读取,数据模块通常还会分为四个子模块,数据收集、数据划分、数据读取、数据预处理。 在进行实验之前,需要收集数据,数据包括原始样本和标签; 有了原始数据之后,...

然后就去远行 3万+

系统学习Pytorch笔记三:Pytorch数据读取机制(DataLoader)与图像预处理模块(transforms)

Pytorch官方英文文档:https://pytorch.org/docs/stable/torch.html? Pytorch中文文档:https://pytorch-cn.readthedocs.io/zh/latest/ 1. 写在前面 疫情在家的这段时间,想系统的学习一遍Pytorch基础知识,因为我发现虽然直接Pytorch实战上手比较快,但是关于一些内部的原理知识其实并不是太懂,这样...

Miracle8070 7万+

PyTorch的数据读取机制

PyTorch 中的 Dataset 和 DataLoader 读哪些数据? 根据 Sampler(DataLoader源码中)输出的 index 决定。 从哪里读数据? 根据Dataset中设置的数据路径读取数据。 如何读数据? Dataset的 __getitem__() 方法,可以帮助我们获取一个样本。 代码示例(以下代码均选自细粒度情感分析的AEN模型): # 构建ABSADataset实例 self.trainset = ABSADataset(op

weixin_43421371的博客 2107

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 387

Python验证码识别神器ddddocr:5分钟搞定网站登录自动化(附完整代码)

本文详细介绍了如何使用Python开源库ddddocr快速实现验证码识别,结合Selenium完成网站登录自动化。ddddocr作为轻量级OCR工具,支持多种验证码类型,识别速度快且准确率高,特别适合自动化测试和爬虫开发。文章包含完整代码示例,从环境配置到实战应用,帮助开发者5分钟内实现验证码破解。

sprite的博客 798

PyTorch 学习笔记(一):让PyTorch读取你的数据集

本文截取自《PyTorch 模型训练实用教程》,获取全文pdf请点击:https://github.com/tensor-yu/PyTorch_Tutorial 转载请注明出处:

人工智能技术学习与分享 6万+

ST7789驱动实战:从SPI时序到RGB565显示的完整配置解析

本文详细解析了ST7789液晶驱动芯片的SPI时序配置与RGB565显示实现,从数据手册解读到代码实战,涵盖SPI接口配置、关键寄存器设置及完整初始化流程。通过优化DMA传输和常见问题排查,帮助开发者高效驱动ST7789显示屏,适用于嵌入式显示项目开发。

weixin_29162439的博客 184

PyTorch|数据读取机制之Dataloader与Dataset

2)若“drop_last=False”,则“1 Epoch = 11 Iteration”,其最后一个Iteration时样本个数为7,小于既定Batchsize。若样本总数87个,当Batchsize-8时,可以知道:1)若“drop_last=True”,则“1 Epoch = 10。”的作用是构建一个可迭代的数据装载器,每次执行循环的时候,就从中读取一批Batchsize大小的样本进行训练。若样本总数80个,当Batchsize=8时,可以知道“1 Epoch = 10 Iteration”。

木千之 1906

别再只调API了!深度拆解Dify文件上传的两种传参方式(sys.file vs. inputs.upload_file)

本文深度解析Dify平台文件上传的两种传参方式——sys.file与inputs.upload_file,详细对比其设计原理、技术实现及适用场景。通过代码示例和性能分析,帮助开发者在本地大模型应用中做出精准技术选型,提升文件处理效率与系统稳定性。

weixin_29063979的博客 268

java对接海康实现页面实时播放和回放

前言:之前已经写过一篇关于视频的文章,因为觉得有很多优化的地方,也谢谢同行们加我微信跟我提了一些需求和意见,所以在过年的假期重新写了一个比较能扩张的版本。 上一个版本的连接:https://blog.youkuaiyun.com/weixin_45848110/article/details/119363602 与之前的版本不同之处: 1.不需要安装ffmpeg 2.不需要安装nginx 3.直接运行jar即可 4.之前是完全脱离海康sdk,回放的录像是保存到本地服务,现在是直接在海康硬盘录像机获取录像回放 5.实时播

weixin_45848110的博客 1万+

PyTorch框架学习八——PyTorch数据读取机制(简述)

PyTorch框架学习八——PyTorch数据读取机制(简单)一、数据二、DataLoader与Dataset1.torch.utils.data.DataLoader2.torch.utils.data.Dataset三、数据读取整体流程 琢磨了一段时间,终于对PyTorch的数据读取机制有了一点理解,并自己实现了简单数据集(猫狗分类数据集)的读入和训练,这里简单写一写自己的理解,以备日后回顾。 一、数据 简单来说,一个机器学习或深度学习问题可以拆解为五个主要的部分:数据、模型、损失函数、优化器和迭代过程

qq_40467656的博客 907

ASPICE标准快速掌握「2.1. 过程能力概览」

一个项目的质量流程是否做的好最终会需要由一个指标来确定,ASPICE将其称为过程能力(Process capability),过程能力是一个综合的判定概念。而为了实现这个概念,ASPICE建立了一套完整的过程评估模型(Process Assessment Model),通过这套评估模型最终就能得出过程能力的最终得分。项目组根据这个得分不断改进和优化得分不足的方面,从而约束整个流程的各个方面来间接提升项目的最终质量。这里有三个关键术语:其中最主要的就是PAM,即过程评估模型,由ASPICE给出,该模型可以看成

雪云飞星的博客 1183

Pytorch:数据读取机制Dataloader与Dataset

读那些数据:由sampler输出的index决定从哪儿读数据:由dataset中的data_dir决定怎么读数据:由dataset中的getitem决定。

qq_44817900的博客 964

在 SAP S/4HANA 的 BP 事务里做保存前校验:BDT 事件、BUPA_FURTHER_CHECKS 与 CVI 扩展 BAdI 一次讲透

SAP BP事务保存前校验机制解析 摘要:本文系统梳理了SAP BP事务保存前的校验机制,揭示了三种关键校验点的差异与适用场景: BDT框架DCHCK事件:最靠近UI层,适合屏幕字段级校验,但API调用时可能失效 Classic BAdI BUPA_FURTHER_CHECKS:全局拦截点,可阻断整个BP保存,适合核心业务规则 CVI扩展校验:仅管控供应商/客户段落,需注意可能产生"BP已保存但段落未保存"的情况 文章通过真实案例(如黑名单校验、付款冻结等)展示了各校验点的最佳实践,并特

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 310

创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ISP图像处理开发案例

创龙科技研发的 TL3588-EVM 评估板具备强大视频处理能力,可满足多场景视频开发需求。为助力开发者快速上手,本文整理 7 个实用视频开发案例,涵盖从采集到显示的全流程,详细说明各案例的硬件连接、参数配置与代码解析,帮助开发者高效实现评估板视频相关功能开发与调试。

创龙,嵌入式一体化解决方案商 209

B站Pytorch深入浅出(一)之数据读取机制DataSet&DataLoader

Pytorch的数据读取的核心是DataLoader方法和Dataset类。

typical_yyc的博客 1020

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

pytorch学习四:pytorch数据读取机制D

学习pytorch数据读取机制中两个重要模块dataloader与Dataset:通过一个人民币分类实验来学习pytorch是如何从硬盘中读取数据的,并深入学习数据读取中涉及的两个模块DataSet与Dataloader; 熟悉数据预处理处理transforms方法的运行机制:数据在读取到pytorch之后通常都需要对数据进行预处理,包括尺寸缩放、转换张量、数据中心化或标准化等等,这些操作都是通...

abcdrachel的博客 770

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度之眼Pytorch打卡(七):Pytorch数据读取机制,DataLoader()和Dataset

前言    无论是模型训练还是实际测试,数据读取都是第一步,因为深度学习说到底是由数据驱动的。如果有能够准确的读入数据的程序,后面再结合预处理、Pytorch中预训练的模型和优化器等就可以构建一个简易的用于预测的模型。Pytorch的数据读取的核心是DataLoader方法和Dataset类。本笔记的框架主要来源于深度之眼,并作了一些相关的拓展,拓展内容主要源自对torch文档的翻译理解。   ...

意疏的学习笔记 2484

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Pytorch系列之——数据读取机制&Transforms

DataLoader与DataSet 人民币二分类 DataLoader与DataSet 根据pytorch张量部分中提到的机器学习模型训练的五大步骤:数据、模型、损失函数、优化器和迭代训练。我们这部分主要介绍模型训练的第一个步骤:数据模块。其中,数据模块通常进一步划分为四个子模块,分别为:数据收集、数据划分、数据读取和数据预处理。 这次主要介绍的部分是数据模块中的数据读取子模块DataLoader,其中DataLoader还可以划分为Sampler和DataSet,Sampler是用来生成索引,而Da

Despacito1006的博客 971

PyTorch学习—6.PyTorch数据读取机制Dataloader与Dataset

文章目录一、PyTorch数据读取机制Dataloader 一、PyTorch数据读取机制Dataloader   PyTorch数据读取在Dataloader模块下,Dataloader又可以分为DataSet与Sampler。Sampler模块的功能是生成索引(样本序号);DataSet是依据索引读取Img、Lable。我们主要学习Dataloader与Dataset。   torch.utils.data.DataLoader() DataLoader(dataset, batch_size=1

柳杰的博客 1027
上一篇: 这16 个必知必会的Python编码技巧你掌握了吗?值得收藏!
下一篇: PyCharm安装教程(详细步骤)
HUHU爱学习
博客等级 码龄4年 1215粉丝 75原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值