b站小土堆pytorch学习记录—— P15 Dataloader的使用
文章目录
- 一、前置知识
- 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=0print(epoch)for data in test_loader:imgs, target = data# print(img.shape)# print(target)writer.add_images("Epoch:{}".format(epoch), imgs, step)step = step+1writer.close()
若将shuffle设置为False,表示“不洗牌”,则两次结果一样:
若将shuffle设置为True,表示“洗牌”,则两次结果不一样:
相关文章:

b站小土堆pytorch学习记录—— P15 Dataloader的使用
文章目录 一、前置知识1.dataloader简要介绍2.dataloader 官方文档(翻译后) 二、DataLoader的使用 一、前置知识 1.dataloader简要介绍 DataLoader 是 PyTorch 中用于加载数据的实用工具,它可以处理数据集的批量加载、数据集的随机打乱、多…...

小程序中使用echarts地图
一、下载并安装echarts 1、下载echarts-for-weixin组件 echarts-for-weixin项目提供了一个小程序组件,用这种方式可以在小程序中方便地使用 ECharts。 下载ec-canvas项目(下载地址) 注意:下载的 ec-canvas 中的echarts的版本…...
swoole协程
协程执行顺序 //hyperf框架 use Co;go(function () {Co::sleep(1); // Io等待一秒echo "hello go1 \n";});echo "hello main \n";go(function () {echo "hello go2 \n";});//打印结果hello mainhello go2hello go1/*运行此段代码, 系统启动一个…...

Android Gradle 开发与应用 (一) : Gradle基础
1. Gradle是什么 Gradle是一个通用的构建工具,支持诸多主要的 IDE,包括 Android Studio、IntelliJ IDEA、Visual Studio 等 Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的开发者通常使用 Groovy 或 Kotlin 来编写构建脚本 1.1 那么为什么Gra…...
PostgreSQL操作笔记
基础操作 数据库相关 -- 查看所有数据库 \l-- 切换到指定数据库 \c 库名-- 查看库中所有表 \d执行SQL脚本 如果有现成的SQL脚本: \i 脚本路径路径一般需要用单引号引起来。 如果需要当场编辑一次性的SQL脚本,可以: \e执行上述命令后会进…...

【微服务】微服务中常用认证加密方案总结
目录 一、前言 二、登录认证安全问题 3.1 认证方式选择 三、常用的加密方案 3.1 MD5加密算法 3.1.1 md5特点 3.1.2 md5原理 3.1.3 md5使用场景 3.2 AES加密算法 3.2.1 AES简介 3.2.2 AES加解原理 3.2.3 AES算法优缺点 3.2.4 AES算法使用场景 3.3 RSA加密算法 3.3…...

【Unity】实现从Excel读取数据制作年份选择器
效果预览: 此处利用Excel来读取数据来制作年份选择器,具体步骤如下。 如果只是制作年份选择器可以参考我这篇文章:构建简单实用的年份选择器(简单原理示范) 目录 效果预览: 一、 Excel准备与存放 1.1 …...

Sqli-labs靶场第18关详解[Sqli-labs-less-18]自动化注入-SQLmap工具注入
Sqli-labs-Less-18 通过测试发现,在登录界面没有注入点,通过已知账号密码admin,admin进行登录发现: 返回了User Agent,设想如果在User Agent尝试加上注入语句(报错注入),测试是否会…...
【测开求职】2023秋招快手一面面经
已经过了百度测开三面,快手这个一面比百度的要难很多,可能也是遇到了比较严格的面试官,感觉其他面经没有这么难。30分钟实习,20分钟算法题,20分钟八股,没有问项目。 实习 diff遇到了哪些痛点diff是全量还是增量一些字段的增加或者枚举值的增加可以用diff测吗有哪些自动化…...

【Go语言】Go语言中的字典
Go语言中的字典 字典就是存储键值对映射关系的集合,在Go语言中,需要在声明时指定键和值的类型,此外Go语言中的字典是个无序集合,底层不会按照元素添加顺序维护元素的存储顺序。 如下所示,Go语言中字典的简单示例&…...
Matlab 机器人工具箱 创建机器人
文章目录 1 创建机器人的几种方法1.1 方法11.2 方法21.3 方法31.4 方法41.5 方法51.6 方法6 2 定义Link属性3 查看Link属性 1 创建机器人的几种方法 1.1 方法1 % theta d a alpha sigma >> L1Link([0 1 0.5 0 0],standard)L1 Revolute(std): thetaq, d1, a0…...

跨平台指南:在 Windows 和 Linux 上安装 OpenSSL 的完整流程
Windows安装 一:找到安装包,双击即可 https://gitee.com/wake-up-again/installation-package.git 二:按照提示,一步一步来,就可以啦 三:此界面意思是,是否想向创作者捐款,自己视情…...

JAVA请求示例获取1688商品详情数据API接口item_get-获得阿里巴巴商品详情(按关键词搜索商品列表)
要获取1688(阿里巴巴)的商品详情数据,你需要使用阿里巴巴开放平台提供的API接口。与淘宝开放平台类似,你需要先在阿里巴巴开放平台注册账号,创建应用,并获取app_key和app_secret。然后,根据阿里…...

安卓手机安装termux、kali linux及基本配置
相关阅读:Termux 高级终端安装使用配置教程 | 国光 百度安全验证 该文安装的 kali liunx 应该是简易版的,没有相关工具 一、下载安装termux 建议通过 f-droid 应用市场下载链接termux,点击即直接下载。 二、配置termux 1.更换镜像源 te…...
Python 实现海康机器人工业相机 MV-CS050-10GC 的实时显示视频流及拍照功能(实时显示视频流同时可以进行拍照)
参考链接: https://www.cnblogs.com/HanYork/p/17388506.html https://www.cnblogs.com/miracle-luna/p/16960556.html#5138211 Flask搭建流媒体服务器:使用Flask搭建一个流媒体服务器_multipart/x-mixed-replace; boundaryframe-CSDN博客...

武器大师——操作符详解(下)
目录 六、单目操作符 七、逗号表达式 八、下标引用以及函数调用 8.1.下标引用 8.2.函数调用 九、结构体 9.1.结构体 9.1.1结构的声明 9.1.2结构体的定义和初始化 9.2.结构成员访问操作符 9.2.1直接访问 9.2.2间接访问 十、操作符的属性 10.1.优先性 10.2.结合性 …...

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:Popup控制)
给组件绑定popup弹窗,并设置弹窗内容,交互逻辑和显示状态。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 popup弹窗的显示状态在onStateChange事件回调中反馈,其显…...
Python系列(20)—— 排序算法
Python中的排序算法 一、引言 排序算法是计算机科学中的基本算法之一,用于将一组数据按照特定的顺序进行排列。Python提供了多种排序算法的实现,包括内置的排序函数和手动实现的排序算法。本文将介绍几种常见的排序算法,并通过代码实例来展…...

MySQL中json类型的字段
有些很复杂的信息,我们一般会用扩展字段传一个json串,字段一般用text类型存在数据库。mysql5.7以后支持json类型的字段,还可以进行sql查询与修改json内的某个字段的能力。 1.json字段定义 ip_info json DEFAULT NULL COMMENT ip信息, 2.按…...

算法学习——GCD与欧拉函数
欧几里得GCD: GCD算法是使用辗转相除法求最大公因数的算法,简单而言就是gcd(a,b) gcd(b,a mod b) 递归写法: int Gcd(int a, int b) {if(b 0)return a;return Gcd(b, a % b); } 迭代写法: int Gcd(int a, int b) {while(b …...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...