当前位置: 首页 > news >正文

DataLoader 的基本用法

DataLoader

在深度学习中,数据加载和预处理是训练模型的关键步骤。PyTorch 提供了 DataLoader 用于简化这一过程。本文将详细介绍 PyTorch 中 DataLoader 的使用,包括基本用法、常见参数及自定义数据集的方式。

基本概念

什么是 DataLoader

DataLoader 是 PyTorch 中的一个类,用于将数据集(通常是一个 Dataset 对象)打包成一个可迭代的对象,方便在训练过程中逐批次读取数据。DataLoader 可以处理数据的随机打乱、并行加载、多线程加载等。

DataLoader 的基本构造

DataLoader 从数据集中取样本,并能够在多个线程中异步读取数据,这是其设计的关键点。


from torch.utils.data import DataLoaderdataloader = DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4)

dataset: 一个继承自 Dataset 的对象,定义了如何获取数据。
batch_size: 指定了每个批次的数据量。
shuffle: 是否在每轮迭代时打乱数据。
num_workers: 加载数据时使用的子进程数,默认值为0,即使用主进程。

使用 DataLoader 加载数据

示例数据集
使用一个简单的数据集来演示 DataLoader 的基本用法。


from torch.utils.data import DataLoader, Datasetimport torchclass SimpleDataset(Dataset):def __init__(self):self.data = torch.arange(100).float().unsqueeze(1)  # 100个样本每个样本包含一个特征self.labels = torch.arange(100).float()  # 标签与数据相同def __len__(self):return len(self.data)def __getitem__(self, idx):x = self.data[idx]y = self.labels[idx]return x, ydataset = SimpleDataset()

创建 DataLoader


dataloader = DataLoader(dataset, batch_size=10, shuffle=True, num_workers=2)for batch in dataloader:inputs, labels = batchprint(inputs, labels)

DataLoader 的常见参数

batch_size
批次大小,默认为1。指每次迭代所返回的数据量。


dataloader = DataLoader(dataset, batch_size=32)

shuffle
是否在每个 Epoch 开始时打乱数据。默认为 False。


dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

num_workers
加载数据时使用的子进程数。默认为 0,即在主进程中加载数据。如果设置为一个大于 0 的数值,则会使用多个进程来加载数据。


dataloader = DataLoader(dataset, batch_size=32, num_workers=4)

自定义 Dataset

有时,内置的数据集无法满足我们的需求,此时我们需要自定义数据集。自定义 Dataset 需要继承 torch.utils.data.Dataset 类并重写 lengetitem 方法。


class CustomDataset(Dataset):def __init__(self, data, labels):self.data = dataself.labels = labelsdef __len__(self):return len(self.data)def __getitem__(self, idx):x = self.data[idx]y = self.labels[idx]return x, ydata = torch.randn(100, 3)  # 100个样本,每个样本包含3个特征labels = torch.randint(0, 2, (100,))  # 100个标签,值为0或1custom_dataset = CustomDataset(data, labels)dataloader = DataLoader(custom_dataset, batch_size=10, shuffle=True)for batch in dataloader:inputs, labels = batchprint(inputs, labels)

数据转换

在实际应用中,通常需要对数据进行一定的预处理,这时可以使用 torchvision.transforms


from torchvision import transformsclass TransformedDataset(Dataset):def __init__(self, data, labels, transform=None):self.data = dataself.labels = labelsself.transform = transformdef __len__(self):return len(self.data)def __getitem__(self, idx):x = self.data[idx]y = self.labels[idx]if self.transform:x = self.transform(x)return x, ytransform = transforms.Compose([transforms.Normalize(mean=[0.5], std=[0.5])])data = torch.randn(100, 1)labels = torch.randint(0, 2, (100,))transformed_dataset = TransformedDataset(data, labels, transform=transform)dataloader = DataLoader(transformed_dataset, batch_size=10, shuffle=True)for batch in dataloader:inputs, labels = batchprint(inputs, labels)

总结

本文介绍了 PyTorch 中 DataLoader 的基本用法、常见参数、自定义数据集以及数据转换。通过合理使用 DataLoader,可以有效简化数据加载和预处理过程,从而专注于模型开发和优化

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • go post请求,参数是raw json格式,response是固定结构。
  • 编程-设计模式 10:外观模式
  • 获取客户端真实IP
  • 以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展
  • LSPosed模块开发第一篇
  • Summernote 富文本编辑器的内容变成只读模式
  • 开源免费的wiki知识库
  • 服务器虚拟内存是什么?虚拟内存怎么设置?
  • 驰骋BPM RunSQL_Init SQL注入漏洞复现
  • 通过数组中元素或者key将数组拆分归类成新的二维数组
  • 轩轩游桂林
  • MySql-MySqlConnector
  • docker 部署 mysql8
  • 设计模式-单一职责模式
  • WPS excel 数据最小二乘法拟合
  • “大数据应用场景”之隔壁老王(连载四)
  • 【Linux系统编程】快速查找errno错误码信息
  • 【面试系列】之二:关于js原型
  • ➹使用webpack配置多页面应用(MPA)
  • 10个最佳ES6特性 ES7与ES8的特性
  • ES6简单总结(搭配简单的讲解和小案例)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • javascript从右向左截取指定位数字符的3种方法
  • Laravel Mix运行时关于es2015报错解决方案
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Puppeteer:浏览器控制器
  • React as a UI Runtime(五、列表)
  • ReactNativeweexDeviceOne对比
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 闭包--闭包之tab栏切换(四)
  • 欢迎参加第二届中国游戏开发者大会
  • 利用jquery编写加法运算验证码
  • 你真的知道 == 和 equals 的区别吗?
  • 前端设计模式
  • 让你的分享飞起来——极光推出社会化分享组件
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 湖北分布式智能数据采集方法有哪些?
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​人工智能书单(数学基础篇)
  • # 职场生活之道:善于团结
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #QT(串口助手-界面)
  • #VERDI# 关于如何查看FSM状态机的方法
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (30)数组元素和与数字和的绝对差
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (翻译)terry crowley: 写给程序员
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (计算机网络)物理层
  • (算法)大数的进制转换