b站小土堆pytorch学习记录—— P15 Dataloader的使用

news2024/11/24 12:09:29

文章目录

  • 一、前置知识
    • 1.dataloader简要介绍
    • 2.dataloader 官方文档(翻译后)
  • 二、DataLoader的使用

一、前置知识

1.dataloader简要介绍

DataLoader 是 PyTorch 中用于加载数据的实用工具,它可以处理数据集的批量加载、数据集的随机打乱、多进程数据加载等功能。通过使用 DataLoader,可以更高效地将数据提供给模型进行训练或推理。

具体来说,DataLoader 提供了以下功能:

数据批量加载:DataLoader 可以将数据集划分为固定大小的批次,使得模型可以逐批次地处理数据。

数据集随机打乱:在训练模型时,通常会希望对数据集进行随机打乱,以避免模型学习到数据的顺序性特征。DataLoader 可以在每个周期(epoch)开始时对数据集进行随机打乱。

多进程数据加载:DataLoader 支持多进程数据加载,可以加快数据加载速度,尤其是当数据预处理耗时较长时。

自定义数据加载顺序:可以通过设置 sampler 或 batch_sampler 参数来自定义数据加载的顺序,比如指定按照某种策略抽取样本。

2.dataloader 官方文档(翻译后)

torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=None, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None, generator=None, *, prefetch_factor=None, persistent_workers=False, pin_memory_device=‘’)

DataLoader 类结合了数据集和采样器,并提供了对给定数据集的可迭代访问。

DataLoader 支持 map-style 和 iterable-style 数据集,可以进行单进程或多进程加载,自定义加载顺序,以及可选的自动分批(collation)和内存固定。

参数:

dataset(Dataset):要加载数据的数据集。
batch_size(int,可选):每个批次要加载的样本数(默认为 1)。
shuffle(bool,可选):设置为 True 时,每个周期都会对数据进行重新洗牌(默认为 False)。
sampler(Sampler 或 Iterable,可选):定义从数据集中抽取样本的策略。可以是任何实现了 len 方法的可迭代对象。如果指定了 sampler,则不能指定 shuffle。
batch_sampler(Sampler 或 Iterable,可选):类似于 sampler,但一次返回一批索引。与 batch_size、shuffle、sampler 和 drop_last 互斥。
num_workers(int,可选):用于数据加载的子进程数。0 表示数据将在主进程中加载(默认为 0)。
collate_fn(Callable,可选):合并样本列表以形成 Tensor 的小批量。当从 map-style 数据集进行批处理加载时使用。
pin_memory(bool,可选):如果为 True,则数据加载器将在返回数据之前将 Tensor 复制到设备/CUDA 固定内存中。
drop_last(bool,可选):设置为 True 时,如果数据集大小不能被批量大小整除,则丢弃最后一个不完整的批次。如果为 False 且数据集的大小不能被批次大小整除,则最后一个批次将较小(默认为 False)。
timeout(数值,可选):如果为正值,则为从工作进程收集批次的超时值。应始终为非负数(默认为 0)。
worker_init_fn(Callable,可选):如果不为 None,则会在每个工作进程上调用,输入为工作进程的 id(范围在 [0, num_workers - 1] 之间),在种子化之后数据加载之前使用(默认为 None)。
multiprocessing_context(str 或 multiprocessing.context.BaseContext,可选):如果为 None,则使用操作系统的默认多进程上下文(默认为 None)。
generator(torch.Generator,可选):如果不为 None,则 RandomSampler 将使用此 RNG 生成随机索引,多进程用于生成工作进程的基础种子(默认为 None)。
prefetch_factor(int,可选,仅限关键字参数):每个工作进程预先加载的批次数。2 表示所有工作进程总共会预先加载 2 * num_workers 个批次。
persistent_workers(bool,可选):如果为 True,则数据加载器在数据集被消耗一次后不会关闭工作进程。这允许保持工作进程的数据集实例处于活动状态(默认为 False)。
pin_memory_device(str,可选):如果 pin_memory 为 True,则用于内存固定的设备(默认为 “”)。

二、DataLoader的使用

代码如下:

import torchvision
# 准备测试的数据集
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

# 从CIFAR10导入数据
test_data = torchvision.datasets.CIFAR10("./dataset1", train=False, transform=torchvision.transforms.ToTensor(), download=True)
# 定义数据加载方式
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)

# 测试数据集中第一张图片及target
img, target = test_data[0]
# print(img)
# print(target)

writer = SummaryWriter("data_loader")
# 两轮获取数据
for epoch in range(2):
    step=0
    print(epoch)
    for data in test_loader:
        imgs, target = data
        # print(img.shape)
        # print(target)
        writer.add_images("Epoch:{}".format(epoch), imgs, step)
        step = step+1

writer.close()

若将shuffle设置为False,表示“不洗牌”,则两次结果一样:

在这里插入图片描述

若将shuffle设置为True,表示“洗牌”,则两次结果不一样:

在这里插入图片描述

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

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

相关文章

面试经典150题 -- 回溯 (总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 17 . 电话号码的字母组合 1 . 先创建一个下标 与 对应字符串映射的数组,这里使用hash表进行映射也是可以的 ; 2 . 对于回溯 ,…

【DUSt3R】2张图2秒钟3D重建

【DUSt3R】2张图2秒钟3D重建 1. DUSt3R是一种用于稠密和无约束立体三维重建的方法,其实现步骤如下:2. 实际运行效果3. 运行结果4. 自问自答4.1 为社么这里要是使用transform模型呢?4.2 CroCo(通过跨视图完成3D视觉任务的自我监督预训练的一个研究)在DUSt3R的作用是什么,为…

蓝桥杯集训·每日一题2024 (差分)

前言&#xff1a; 差分笔记以前就做了&#xff0c;在这我就不再写一遍了&#xff0c;直接上例题。 例题&#xff1a; #include<bits/stdc.h> using namespace std; int a[10009],b[100009]; int main(){int n,ans10,ans20;cin>>n;for(int i1;i<n;i){cin>>…

凸优化和非凸优化

在数学中一个非凸的最优化问题是什么意思&#xff1f; 1、凸优化和非凸优化的定义 2、凸优化&#xff1a;相对简单 在凸集中&#xff0c;有个基本理论&#xff0c;那就是任意局部最优解一定是全局最优解。基于这个性质&#xff0c;设计一个简单的局部算法&#xff0c;比如 贪…

MySQL 的备份方式

MySQL 的备份方式 1. 逻辑备份 逻辑备份是指将数据库中的数据导出为可读的 SQL 语句&#xff0c;通过这些语句可以还原数据库的结构和数据。 使用 mysqldump 工具进行逻辑备份 - **命令示例&#xff1a;**mysqldump -u [username] -p [database_name] > backup_file.sql- …

企微hook源码第二弹

免费的企微框架&#xff0c;可下载测试。 支持文本消息&#xff0c;图片消息&#xff0c;视频消息&#xff0c;文件消息。 有兴趣可以进群交流。649480745&#xff0c;群内不定期开源企微hook源码 接下来就是第二弹的企微hook源码。后续会在群内开源完整源码。

【比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据】操作批量新增、分页查询(三)

orm框架使用性能比较 比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.4…

CodeFlying 和 aixcoder两大免费软开平台,孰强孰弱?

今天为大家带来码上飞CodeFlying和aixcoder两款免费的软件开发平台效果的测评 一、产品介绍 首先简单介绍一下这两个平台 码上飞CodeFlying&#xff1a;码上飞 CodeFlying | AI 智能软件开发平台&#xff01; 是一款革命性的软件开发平台&#xff0c;它通过将软件工程和大模…

分库分表如何管理不同实例中几万张分片表?

在进行分库分表设计时&#xff0c;确认好了数据节点数量和分片策略以后&#xff0c;接下来要做的就是管理大量的分片表。实际实施过程中可能存在上百个分片数据库实例&#xff0c;每个实例中都可能有成千上万个分片表&#xff0c;如果仅依靠人力来完成这些任务显然是不现实的。…

spring自定义事件监听器

1. 创建自定义事件 import org.springframework.context.ApplicationEvent; import java.util.List;public class CollectionCreateEvent extends ApplicationEvent {private List<String> fileList;public CollectionCreateEvent(Object source,List<String> file…

【CSP试题回顾】201312-2-ISBN号码

CSP-201312-2-ISBN号码 解题思路 输入ISBN码&#xff1a;从用户接收一个ISBN字符串。 初始化变量&#xff1a;创建一个向量verifyArray来存储ISBN的前9位数字&#xff0c;和两个整数identificationCode和checkSum分别用于存储ISBN的校验位和计算出的校验和。 处理ISBN字符串…

道路积水监测站——确保道路畅通和行车安全

TH-JS1道路积水监测站是一种专门用于监测城市道路积水情况的设备&#xff0c;旨在保障城市道路安全和防止水患对交通造成的不利影响。这些监测站通过实时检测和记录道路积水数据&#xff0c;为城市管理部门提供重要信息&#xff0c;以便及时采取应对措施&#xff0c;确保道路畅…

【CSP试题回顾】201409-2-画图

CSP-201409-2-画图 解题思路 定义picture的二维数组&#xff0c;用于记录每个单元是否被涂色。数组的大小被设置为105x105&#xff0c;这是为了确保能够覆盖题目中可能出现的所有坐标。 输入变量n&#xff0c;表示将要绘制的矩形数量。 对于每个矩形&#xff0c;读取其左下角…

Ruoyi框架上传文件

axios资料&#xff1a;axios中文文档|axios中文网 | axios axiosjson 默认情况下&#xff0c;axios将JavaScript对象序列化为JSON。 submit(data) {if (data && this.definitionId) {// 启动流程并将表单数据加入流程变量startProcess(this.definitionId, JSON.string…

MySQL--优化(SQL语句执行慢,如何分析)

MySQL–优化&#xff08;SQL语句执行慢&#xff0c;如何分析&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 一、如何分析 聚合查询&#xff1a; 对于涉及大量数据的聚合操作&#xff0c;如果可能的…

【GIS技术】GIS在地质灾害易损性评价、危险性评估与灾后重建中的实践技术应用

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

python并发 map函数的妙用

1.map是什么&#xff1f; map函数是Python中的一个内置函数&#xff0c;用于将一个函数应用到一个或多个可迭代对象的每个元素上&#xff0c;生成一个新的可迭代对象。它的一般形式是&#xff1a; map(function, iterable1, iterable2, ...)其中&#xff0c;function是一个函…

linux安装mysql5.7

linux安装mysql5.7 一、下载mysql5.7二、解压包介绍三、上传包到linux四、卸载mariadb五、安装mysql六、修改权限七、启动mysql八、使用过navicat创作不易&#xff0c;笔记不易&#xff0c;如觉不错&#xff0c;请三连&#xff0c;谢谢~~ 一、下载mysql5.7 去mysql官方下载&am…

Python解释器及PyCharm安装教程

PyCharm官方下载地址☞https://www.jetbrains.com/pycharm/download/?sectionwindows Python解释器官方下载地址☞ https://www.python.org/downloads/windows/

pytorch续写tensorboard

模型训练到一半有 bug 停了&#xff0c;可以 resume 继续炼&#xff0c;本篇给出 pytorch 在 resume 训练时续写 tensorboard 的简例&#xff0c;参考 [1-3]&#xff0c;只要保证 writer 接收的 global step 是连着的就行。 Code import numpy as np from torch.utils.tensor…