初识pytorch:深度学习中关于数据加载的Dataset和DataLoader

news/2025/10/11 18:56:17/文章来源:https://www.cnblogs.com/wodetiansama/p/19135777

目录
  • Dataset类
  • DataLoader类
  • Dataset和DataLoader之间的联系

Dataset类

首先关于 Dataset ,直接翻译过来就是数据集。当然就目前我学习的感悟来看这个东西翻译的完全没错,关于这个 Dataset 类中的一些对象就是数据集。
所谓数据集,就是数据的集合,这也是我们之后训练神经网络必不可少的原料。
Dataset 类是数据加载的核心组件之一,它主要用于封装数据集,提供统一的接口来访问数据样本。Dataset 位于 torch.utils.data 模块中,是一个抽象基类,用户通常需要通过继承它来实现自定义的数据集类。
它的核心作用有3点:
1.封装数据:将数据(如图像、文本、标签等)组织成可迭代访问的形式
2.提供统一接口:通过 getitem 方法按索引获取样本,通过 len 方法获取数据集大小
3.方便与 DataLoader 结合使用:实现数据的批量加载、打乱顺序、多进程加载等功能

如果需要自己创建自定义数据集,需要继承 Dataset 并实现以下两个核心方法:

  • __len__():返回数据集的样本总数
  • __getitem__(index):根据索引返回一个样本(通常是数据和对应的标签)

下面是一段示例代码:

import torch
from torch.utils.data import Datasetclass CustomDataset(Dataset):def __init__(self, data, labels):"""初始化数据集:param data: 输入数据:param labels: 数据对应的标签"""self.data = dataself.labels = labelsdef __len__(self):"""返回数据集大小"""return len(self.data)def __getitem__(self, idx):"""根据索引返回样本"""sample_data = self.data[idx]sample_label = self.labels[idx]# 可以在这里进行数据预处理# 例如:转换为Tensor、归一化等return {'data': torch.tensor(sample_data, dtype=torch.float32),'label': torch.tensor(sample_label, dtype=torch.long)}# 使用示例
if __name__ == "__main__":# 模拟数据data = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]labels = [0, 1, 0, 1]# 创建数据集实例dataset = CustomDataset(data, labels)# 查看数据集大小print(f"数据集大小: {len(dataset)}")# 获取单个样本sample = dataset[0]print(f"第一个样本数据: {sample['data']}")print(f"第一个样本标签: {sample['label']}")

当然pytorch中还提供了一些预定义的Dataset子类(工具类),可以根据自己的实际需求方便处理常见的数据格式(当然我没用过),先列在下面吧,大家有个印象就行(反正ai会解决一切问题)。

  • TensorDataset:用于包装张量数据,当数据以张量形式存在时非常方便
  • ConcatDataset:用于拼接多个数据集
  • ChainDataset:用于按顺序链式访问多个数据集

DataLoader类

DataLoader!Dataset的最好搭子,它们之间搭配使用可以让Dataset里面的相关数据在神经网络之中得到最大的利用。
在 PyTorch 中,DataLoader 是与 Dataset 配合使用的关键组件,主要负责数据的批量加载、打乱顺序、多进程加载等功能,是构建高效数据管道的核心工具。它位于 torch.utils.data 模块中,能够将 Dataset 提供的单个样本转换为模型训练所需的批量数据。

DataLoader的作用
1.批量处理数据:将单个样本组合成批次(batch),匹配模型训练时的批量输入需求
2.数据打乱:在每个 epoch 开始时随机打乱数据顺序,提高模型泛化能力
3.多进程加载:使用多进程并行加载数据,解决数据加载成为训练瓶颈的问题
4.内存优化:通过迭代器方式加载数据,避免一次性将所有数据载入内存
5.支持自定义_collate:灵活处理非结构化数据(如长度不一的文本、图像等) --->这个我暂时还没有用到

DataLoader 的构造函数需要传入一个 Dataset 对象,并通过参数配置批量加载的规则。这么说起来可能有点抽象,还是一样的,示例代码如下:

from torch.utils.data import DataLoaderdataloader = DataLoader(dataset,          # 传入Dataset对象batch_size=32,    # 批大小,每次加载32个样本shuffle=True,     # 是否在每个epoch打乱数据num_workers=4,    # 多进程加载的进程数collate_fn=None,  # 自定义批量处理函数(可选)drop_last=False   # 是否丢弃最后一个不完整的批次
)

DataLoader中的相关参数介绍:

  • dataset:必须传入的 Dataset 对象,是数据的来源
  • batch_size:每个批次包含的样本数(默认值为 1)。根据模型大小和显存容量调整,例如显存较大时可设为 64 或 128。
  • shuffle:布尔值,指定是否在每个 epoch 开始时打乱数据顺序。训练集通常设为 True,验证集 / 测试集设为 False。
  • num_workers:用于数据加载的子进程数(默认值为 0,表示使用主进程加载)。适当增大可加速数据加载,但不宜超过 CPU 核心数。
  • collate_fn:自定义的函数,用于将多个样本组合成一个批次(默认会自动处理张量的拼接)。当样本结构复杂(如长度不一的序列)时,需要自定义该函数。
  • drop_last:布尔值,若数据集大小不能被 batch_size 整除,是否丢弃最后一个不完整的批次(默认值为 False)。训练时可设为 True 避免批次大小不一致。
  • pin_memory:布尔值,若设为 True,会将加载的数据复制到 CUDA 固定内存中,加速后续 GPU 传输(仅在使用 GPU 时有效)。

Dataset和DataLoader之间的联系

DataLoader 和 Dataset 是 PyTorch 中数据加载 pipeline 的两个核心组件,它们紧密配合,共同构成了高效数据处理 pipeline。两者的关系可以概括为:Dataset 负责数据的封装和单个样本的获取,DataLoader 负责将单个样本组织成批量数据并高效加载。

具体的联系和它们之间的分工

1.数据来源与封装:Dataset 的角色
Dataset 是数据的 “源头”,它的核心作用是:

  • 封装原始数据(如图像文件、文本、标签等),提供统一的接口
  • 通过 getitem(index) 方法按索引返回单个样本(如一张图像和对应的标签)
  • 通过 len() 方法返回数据集的总样本数

简单说,Dataset 就像一个 “仓库管理员”,知道数据在哪里、有多少,并且能按编号取出指定的物品。

2.批量处理与加载:DataLoader 的角色
DataLoader 是 Dataset 的 “搬运工”,它接收 Dataset 提供的单个样本,进行以下操作:

  • 将多个样本组合成批次(batch) 数据(如一次返回 32 个样本)
  • 支持数据打乱(shuffle=True),避免模型学习到数据顺序规律
  • 通过多进程(num_workers)并行加载数据,提升效率
  • 处理不规则数据的批量拼接(通过 collate_fn) --->是的这个我没用过

也就是说,DataLoader 会从 Dataset 中 “定期取货”,并将零散的 “货物” 打包成适合模型输入的 “标准包裹”。

总的来说这两者,Dataset解决了数据源的问题,DataLoader解决了怎么搞笑利用数据源的问题。它们结合起来(我们联合!),才能两面包夹芝士一起共同高效、有质量的构建出一个好的网络模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025卧式CNC高压清洗机厂家推荐榜:高效清洁与卓越性能首

2025卧式CNC高压清洗机厂家推荐榜:高效清洁与卓越性能首选随着工业制造技术的不断进步,卧式CNC高压清洗机在各个行业的应用越来越广泛。这些设备不仅能够提供高效的清洁效果,还能显著提升生产效率和产品质量。为了帮…

2025年深水搅拌机曝气机优质供应商推荐品牌/源头工厂/哪家好?

深水搅拌机曝气机优质供应商推荐:南京兰江泵业有限公司 在污水处理领域,深水搅拌机与曝气机作为关键设备,其性能优劣直接关系到污水处理的效果与效率。今天,我们为大家推荐一家在该领域具有深厚实力与丰富经验的优…

工具篇-Cursor中接入DeepSeek,只要这三步

转载:https://blog.csdn.net/wml731/article/details/147811773?ops_request_misc=%257B%2522request%255Fid%2522%253A%25222c5e5e1f6746aa1b87924c8661396c25%2522%252C%2522scm%2522%253A%252220140713.130102334…

实用指南:告别“硬件绑定”困局:青云云易捷如何让异构服务器“物尽其用”

实用指南:告别“硬件绑定”困局:青云云易捷如何让异构服务器“物尽其用”2025-10-11 18:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x:…

2025年中医确有专长培训TOP5榜单:权威认证与实战经验结

2025年中医确有专长培训TOP5榜单:权威认证与实战经验结合随着中医药行业的蓬勃发展,越来越多的人开始关注中医确有专长培训。为了帮助筛选出真正具有专业水平和实战经验的培训机构,我们特此发布了一份权威推荐榜单,…

.NET 记录Amazon上传S3异常问题

上传文件至S3,提示AmazonS3Exception异常:The provided x-amz-content-sha256 header does not match what was computed.确认了下,代码逻辑已经很久未动了。 没得办法,只能动用终极工具-二分查找,分段revert之前…

求职信 - MKT

求职信第一次提交 版本1 Cover letter尊敬的编辑我们谨向您提交题为《基于情景模拟与模糊聚水管道监测点自动布设方法》的稿件,恳请贵刊予以考虑发表。本研究提出了一种融合情景模拟与模糊聚类分析的新方法,用于城市…

Linux中tar、zip、gz、rar文件 解压缩归类

tar命令解压缩 扩展名说明: .tar 表示只是打包文件,并不压缩,操作时命令选项中为不含有z; .tar.gz 表示使用了tar打包后,再使用gunzip进行压缩的文件,该文件进行了实际的压缩(操作时命令选项中含有z)。 基本语法…

PostgreSQL多节点部署分布式数据库之Citus

PostgreSQL多节点部署分布式数据库之Citus 1. citus的架构主要资源信息: SCNP_prod_olap_manage_01 10.133.165.29 root / 密码 SCNP_prod_olap_manage_02 10.133.165.172 root / 密码 SCNP_prod_olap…

2025气柱袋厂家最新推荐榜:包装防护与性价比之选!

2025气柱袋厂家最新推荐榜:包装防护与性价比之选!随着电商行业的快速发展,包装材料的需求也在不断增长。气柱袋作为一种高效的缓冲包装材料,因其轻便、环保、成本低等优点而受到越来越多企业的青睐。为了帮助筛选气…

java项目CPU爆高问题排查方案

问题:CPU占用过高时,系统处理请求的速度会变慢,导致延迟增加,可能导致其他任务无法获取足够的处理资源,导致服务宕机,高CPU占用可能与大量线程阻塞和死锁有关,在多线程任务中,如果线程无法获取CPU资源或者被阻…

2025实验室净化优质厂家推荐:华锐净化专业定制,洁净空间首

2025实验室净化优质厂家推荐:华锐净化专业定制,洁净空间首选随着科技的不断进步和工业生产的日益精细化,实验室净化领域面临着前所未有的技术挑战。本文将深入探讨当前实验室净化领域的技术难题,并介绍一家在该领域…

小九源码-springboot051-智能推荐旅游平台 - 实践

小九源码-springboot051-智能推荐旅游平台 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

《从0到1搭建客户画像系统:AI工具矩阵如何解决编写困局》

《从0到1搭建客户画像系统:AI工具矩阵如何解决编写困局》2025-10-11 18:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

2025方钢供应厂家推荐:山东鑫泽金属制品优质选择!

2025方钢供应厂家推荐:山东鑫泽金属制品优质选择!随着工业和建筑行业的快速发展,方钢作为重要的建筑材料之一,其需求量持续增长。然而,方钢领域的技术挑战也日益凸显,这不仅影响了产品的质量和性能,还对整个产业…

2025年中国行业内领先的GEO(AI搜索优化)厂家权威推荐榜单:四川云视GEO当首

面对生成式AI的浪潮,选对优化伙伴,让您的企业在智能搜索时代占据先机。 在生成式人工智能(AIGC)技术迎来爆发式发展的2025年,生成引擎优化(GEO)已从概念验证阶段全面迈入规模化应用时代。 该领域市场规模已突破…

【vLLM】使用vLLM部署Qwen3-VL-30B-A3B-Instruct

环境与设备配置:H20*8(96G)MODEL_ID=Qwen/Qwen3-VL-30B-A3B-Instruct MODEL_NAME=Qwen3-VL-30B-A3B-Instruct python3 -m vllm.entrypoints.openai.api_server \--model $MODEL_ID \--served-model-name $MODEL_NAME…

2025 屋顶防水维修/外墙防水维修/电梯井防水维修厂家推荐榜:专注全场景渗漏解决方案供应!

随着建筑行业迭代升级、存量房老龄化加剧及家庭居住品质需求提升,防水维修作为保障建筑结构安全、延长使用寿命、提升居住舒适度的核心环节,市场需求持续激增。但行业痛点凸显:部分小作坊式厂家使用劣质防水材料以次…

2025 流化床/GMP标准/实验室气流粉碎机厂家推荐榜:聚焦多行业粉碎需求,赋能高效生产!

随着新材料、医药、食品、化工等行业的精细化发展,气流粉碎机作为实现物料超微粉碎的核心设备,市场需求持续增长。但行业现存诸多痛点:部分厂家为压缩成本,采用劣质核心部件,导致设备粉碎精度低、能耗高、易故障;…