Pytorch 自学笔记(三):利用自定义文本数据集构建Dataset和DataLoader
Pytorch 自学笔记(三)
- 1. Dataset与DataLoader
- 1.1 torch.utils.data.Dataset
- 1.2 torch.utils.data.DataLoader
Pytorch 自学笔记系列的第三篇。针对Pytorch的Dataset和DataLoader进行简单的介绍,同时,介绍如何使用自定义文本数据集构建Dataset和DataLoader,以实现数据集的随机采样与batch加载。(注:文中代码使用python3.7和pytorch1.7.1编写)
1. Dataset与DataLoader
1.1 torch.utils.data.Dataset
torch.utils.data.Dataset
是pytorch中定义的数据集抽象类,pytorch中任何的数据集类都必须继承并重写这个类,其源码如下:
class Dataset(Generic[T_co]):r"""An abstract class representing a :class:`Dataset`.All datasets that represent a map from keys to data samples should subclassit. All subclasses should overwrite :meth:`__getitem__`, supporting fetching adata sample for a given key. Subclasses could also optionally overwrite:meth:`__len__`, which is expected to return the size of the dataset by many:class:`~torch.utils.data.Sampler` implementations and the default optionsof :class:`~torch.utils.data.DataLoader`... note:::class:`~torch.utils.data.DataLoader` by default constructs a indexsampler that yields integral indices. To make it work with a map-styledataset with non-integral indices/keys, a custom sampler must be provided."""def __getitem__(self, index) -> T_co:raise NotImplementedErrordef __add__(self, other: 'Dataset[T_co]') -> 'ConcatDataset[T_co]':return ConcatDataset([self, other])# No `def __len__(self)` default?# See NOTE [ Lack of Default `__len__` in Python Abstract Base Classes ]# in pytorch/torch/utils/data/sampler.py
而任何继承torch.utils.data.Dataset
的数据集类,必须重写__getitem__
方法,可以选择性重写__len__
方法(若要以该数据集类构建torch.utils.data.Sampler
或者torch.utils.data.DataLoader
,则必须重写__len__
方法)。__getitem__
方法的作用为,利用index获得数据集中该index对应的样本(这就要求该数据类中必须维持一个可以;),而__len__
方法的作用为返回数据集的样本数量。一个torch.utils.data.Dataset
子类的样例如下:
from torch.utils.data import Dataset
import pandas as pdclass MyDataset(Dataset):def __init__(self, csv_file, txt_file, root_dir, other_file):self.csv_data = pd.read_csv(csv_file)with open(txt_file, 'r') as f:data_list = f.readlines()# 可利用索引下标进行取值的成员变量,list类型self.txt_data = data_listself.root_dir = root_dir# 返回数据集的样本数量def __len__(self):return len(self.csv_data)# 返回数据集中索引为idx的样本def __getitem__(self, index):data = (self.csv_data[index], self.txt_data[index])return data
利用自定义的Dataset子类,可以将我们的数据集定义我们需要的数据类,然后通过迭代的方式利用index下标索引来获取数据集中的每一条样本数据。而数据集的batch取样和取样时的shuffle,则需要利用torch.utils.data.DataLoader
来实现。
1.2 torch.utils.data.DataLoader
首先需要明确一点,Dataset和DataLoader本质上都是iterable(可迭代对象),都可以实现数据集的迭代访问。而 torch.utils.data.DataLoader
相当于是Dataset(数据集)和Sampler(采样器)的组合,即可以在Dataset上进行迭代的自定义采样。同时,DataLoader还支持单进程或多进程加载,自定义加载顺序以及可选的自动批处理(整理)和memory pinning,它还支持 map风格的数据集对象,其参数具体解释如下(参数说明参考了这篇文章,并按照pytorch1.7.1的文档进行了修改):
- dataset(Dataset): 传入的数据集类
- batch_size(int, optional): 每个batch有多少个样本
- shuffle(bool, optional): 在每个epoch开始的时候,对数据进行重新排序(即随机采样)
- sampler(Sampler or Iterable, optional): 自定义从数据集中取样本的策略;如果指定这个参数,那么shuffle必须为False;该值可以为任何实现了
__len__
函数的Iterable对象 - batch_sampler(Sampler or Iterable, optional): 与sampler类似,但是一次只返回一个batch的indices(索引),需要注意的是,一旦指定了这个参数,那么batch_size,shuffle,sampler,drop_last就不能再指定了(互斥——Mutually exclusive)
- num_workers (int, optional):这个参数决定了有几个进程来处理data loading;0意味着所有的数据都会被load进主进程(默认为0)
- collate_fn (callable, optional): 一个函数,该函数的作用是将一个由样本构成的batch_size大小的list转换成mini-batch,该函数的输出即为迭代时获得的batch
- pin_memory (bool, optional): 如果设置为True,那么data loader将会在返回它们之前,将tensors拷贝到CUDA中的固定内存(CUDA pinned memory)中
- drop_last (bool, optional):如果设置为True:这个是对最后的未完成的batch来说的,比如你的batch_size设置为64,而一个epoch只有100个样本,那么训练的时候后面的36个就被扔掉了;如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点
- timeout(numeric, optional):如果是正数,表明等待从worker进程中收集一个batch等待的时间,若超出设定的时间还没有收集到,那就不收集这个内容了;这个numeric应总是大于等于0;默认为0
- worker_init_fn (callable, optional): 每个进程的初始化函数 If not None, this will be called on eachworker subprocess with the worker id (an int in [0, num_workers - 1]) as input, after seeding and before data loading. (default: None)
- prefetch_factor (int, optional, keyword-only arg):每个进程预先加载的样本数量。该值2意味着所有的进程预先加载了2 * num_workers个样本(默认为2)
- persistent_workers (bool, optional) :如果为True,则迭代完一次数据集后,DataLoader将不会关闭工作进程;这样可以使Worker Dataset实例保持活动状态(默认为False)
利用上一节定义的MyDataset
数据集类可以构建一个DataLoader对象:
from torch.utils.data import DataLoadermy_data_loader = DataLoader(myDataset, batch_size=32, shuffle=True)
相关文章:
Pytorch 自学笔记(三):利用自定义文本数据集构建Dataset和DataLoader
Pytorch 自学笔记(三) 1. Dataset与DataLoader1.1 torch.utils.data.Dataset1.2 torch.utils.data.DataLoader Pytorch 自学笔记系列的第三篇。针对Pytorch的Dataset和DataLoader进行简单的介绍,同时,介绍如何使用自定义文本数据集…...
gradle项目的创建和基本结构简介
文章目录 创建gradle项目(命令行)创建gradle项目(IDEA)项目基本结构和功能Gradle 构建流程测试类体验 创建gradle项目(命令行) yangMacdeMac-mini gradleStudy % gradle init Starting a Gradle Daemon (s…...
wow-agent---Day3 Zigent 智能代理开发框架
这个框架是课程讲解的,但资料比较少,觉得框架比较小众,所以这里只分析代码,打算把更多的精力放在metagpt的学习上,毕竟还是要学教为主流的框架,这对后续维护升级都有帮助,当然感兴趣作为研究&am…...
python 入门
1. Python 概述 1.1 简介 python 是一种面向对象的解释型编程语言,由吉多范罗苏姆开发; 1991 年,公开发行版发布; 因其可以将其他语言制作的模块轻松联接在一起,又被称作胶水语言; 1.2 优点 简单易学&…...
sentinel微服务保护
学习链接 SpringCloudRabbitMQDockerRedis搜索分布式 文章目录 学习链接1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结 1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel官网地址github地址…...
接口测试Day10-封装IHRM登录
-登录接口 普通方式实现 登录接口对象层 思路: 动态变化的,写入参数固定不变,直接写到方法实现内响应结果,通过返回值 return 分析: 封装实现: 登录接口测试用例层 封装断言方法 1、创建 文件 assert_uti…...
什么是IP地址、子网掩码、网关、DNS
简单解释 IP地址在网络中用于标识一个节点(或者网络设备的接口) IP地址用于IP报文在网络中的寻址 一个IPv4地址有32 bit。 IPv4地址通常采用“点分十进制”表示。 IPv4地址范围:0.0.0.0~255.255.255.255 网络部分:用来标识一个网络,代表IP地址所属网络。 主机部分:…...
python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)角点检测
角点检测(Corner Detection)是计算机视觉和图像处理中重要的步骤,主要用于提取图像中的关键特征,以便进行后续的任务,比如图像匹配、物体识别、运动跟踪等。下面介绍几种常用的角点检测方法及其应用。 1. Harris角点检…...
软路由系统iStoreOS 一键安装 docker compose
一键安装命令 大家好!今天我来分享一个快速安装 docker-compose 的方法。以下是我常用的命令,当前版本是 V2.32.4。如果你需要最新版本,可以查看获取docker compose最新版本号 部分,获取最新版本号后替换命令中的版本号即可。 w…...
Invicti-Professional-V25.1
01 更新介绍 此更新包括对内部代理的更改。内部扫描代理的当前版本为 25.1.0。内部身份验证验证程序代理的当前版本为 25.1.0。#新功能现在,单击扫描摘要屏幕中的预设扫描图标会将您重定向到具有过滤视图的 “最近扫描” 页面,从而改进导航和对相关扫描…...
【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
🔥 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用(Enabled) 2.3 坐标系(Geometry) **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题(windowTiltle&a…...
Spring WebFlux
文章目录 一、概述1、Spring体系定位2、Spring MVC和WebFlux差异 二、入门1、依赖2、ReactorHttpHandlerAdapter(main启动)3、DispatcherHandler(SpringWebFlux启动)4、WebFilter 三、DispatcherHandler理解1、handle 前置知识&am…...
【AI | pytorch】torch.polar的使用
一、torch.polar的使用 torch.polar 是 PyTorch 中用来生成复数张量的一个函数,但它与数学中的复数表达式 ( z re^{i\theta} ) 是等价的。 具体来说,torch.polar(abs, angle) 接受两个实数张量参数: abs:表示复数的模长&#…...
AWTK fscript 中的 输入/出流 扩展函数
fscript 是 AWTK 内置的脚本引擎,开发者可以在 UI XML 文件中直接嵌入 fscript 脚本,提高开发效率。本文介绍一下 fscript 中的 iostream 扩展函数 1.iostream_get_istream 获取输入流对象。 原型 iostream_get_istream(iostream) > object示例 va…...
【多线程】线程池
一、什么是线程池 线程池(Thread Pool)是一种多线程并发执行的设计模式,它通过维护一个线程集合来执行多个任务,避免频繁地创建和销毁线程,提高系统性能和响应速度。 就好比如你经营了一家餐饮店,你名下有…...
小结:路由器配置和管理 RIP协议
华为路由器中配置和管理 RIP(Routing Information Protocol)的相关指令主要分为以下几个部分:基础配置指令、接口配置指令、路由控制指令和调试指令。以下是总结: 1. 启用 RIP 协议 [Huawei] rip 1rip 1:表示创建并启…...
基于海思soc的智能产品开发(高、中、低soc、以及和fpga的搭配)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 市场上关于图像、音频的soc其实非常多,这里面有高、中、低档,开发方式也不相同。之所以会这样,有价格的因素&am…...
于灵动的变量变幻间:函数与计算逻辑的浪漫交织(下)
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 这一节我们主要来学习单个函数的声明与定义,static和extern… 这里写目录标题 一、单个函数…...
偷偷的学Java
序章:为何要偷偷学Java? • Java,不仅仅是一种编程语言 • 偷偷学Java,快速提升你的竞争力 •Java学习秘籍 第一章:Java的神秘面纱 •Java的起源与发展历程 •Java的生态系统与应用场景 • Java与其他编程语言的…...
以单用户模式启动 Linux 的方法
注:本文为 “Linux 启动单用户模式” 相关文章合辑。 未整理去重。 以单用户模式启动 linux 的三种方法 作者: Magesh Maruthamuthu 译者: LCTT Xiaobin.Liu 2020-05-03 23:01 单用户模式,也被称为维护模式,超级用户…...
【AI论文】生成式视频模型是否通过观看视频学习物理原理?
摘要:AI视频生成领域正经历一场革命,其质量和真实感在迅速提升。这些进步引发了一场激烈的科学辩论:视频模型是否学习了能够发现物理定律的“世界模型”,或者,它们仅仅是复杂的像素预测器,能够在不理解现实…...
【有啥问啥】Contrastive Captioners(CoCa):对比式图像描述模型——图像-文本基础模型的新范式
Contrastive Captioners(CoCa):对比式图像描述模型——图像-文本基础模型的新范式 引言 随着深度学习技术的发展,多模态模型在处理视觉和语言任务方面的能力逐渐增强。特别是大规模预训练模型的兴起,使得这些模型可以快速迁移到许多下游任务…...
Python(十七)excel指定列自动翻译成英文
前言 本章主要讲述在excel的指定列后面添加一列,并翻译成英文 一、效果图 二、代码 实际需求: # -*- codeing utf-8 -*- # time: 2025/1/16 16:32 # Author : Mikasa # # Aim:自动将客户发的货物清单里的商品名称,翻译成英文…...
【论文投稿】探秘计算机视觉算法:开启智能视觉新时代
目录 引言 一、计算机视觉算法基石:图像基础与预处理 二、特征提取:视觉信息的精华萃取 三、目标检测:从图像中精准定位目标 四、图像分类:识别图像所属类别 五、语义分割:理解图像的像素级语义 六、计算机视觉…...
【机器学习实战入门】使用LSTM机器学习预测股票价格
机器学习在股票价格预测中有重要的应用。在这个机器学习项目中,我们将讨论如何预测股票的收益。这是一个非常复杂的任务,充满了不确定性。我们将会把这个项目分成两部分进行开发: 首先,我们将学习如何使用 LSTM 神经网络预测股票…...
(一)相机标定——四大坐标系的介绍、对应转换、畸变原理以及OpenCV完整代码实战(C++版)
一、四大坐标系介绍 1,世界坐标系 从这个世界(world)的视角来看物体 世界坐标系是3D空间坐标,每个点的位置用 ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw,Yw,Zw)表示 2,相机坐标系 相机本身具有一个坐标系&…...
Bootstrap 下拉菜单
Bootstrap 下拉菜单 Bootstrap 是一个流行的前端框架,它提供了许多预构建的组件,其中之一就是下拉菜单。下拉菜单是一个交互式元素,允许用户从一系列选项中选择一个。在本篇文章中,我们将详细介绍如何在 Bootstrap 中创建和使用下…...
WinHttp API接口辅助类实现GET POST网络通讯
1、简述 近期需要在MFC基础上开发网络Http通讯,开始使用的WinINet进行通讯,后面发现WinINet对连接超时这块不支持设置,在网上搜索了几种方式效果都不太好,于是决定用WinHttp API接口进行通讯,分别对GET、POST进行了封装。 2、使用到接口 2.1、WinHttpOpen WinHttpOpen 是…...
Elasticsearch实战应用
嘿,小伙伴们,今天咱们来唠唠Elasticsearch,这可是个超厉害的搜索引擎,能帮你在海量数据里快速找到想要的东西,就像给你的数据装上了“放大镜”。 一、啥是Elasticsearch 简单来说,Elasticsearch就是一个基…...
MySQL存储过程
存储过程: 事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的,思想上就是sql语言层面的代码封装与重用 …...
安路FPGA开发工具TD:问题解决办法 及 Tips 总结
安路科技(Anlogic)是一家专注于高性能、低功耗可编程逻辑器件(FPGA)设计和生产的公司。其提供的开发工具TD(TangDynasty)是专门为安路FPGA系列产品设计的集成开发环境(IDE)。以下是对…...
高精度阶乘C++实现
高精度计算,实际上就是模拟竖式计算,代码如下,请慢慢消化,如有不足或建议,请在评论区留言 这个阶乘操作实际上就是高精度乘法的运用,可以非常容易的在考场上写出来 #include <bits/stdc.h> using na…...
PageHelper快速使用
依赖 <!--分页插件PageHelper--> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version> </dependency>示例 /** * 封装分页结果…...
“AI 辅助决策系统:决策路上的智慧领航员
在当今瞬息万变的时代,无论是企业的运营管理,还是个人在生活中的重大抉择,都需要精准、高效的决策。然而,信息的繁杂和未来的不确定性,常常让决策变得困难重重。这时,AI 辅助决策系统宛如一位智慧的领航员&…...
[Linux] linux 系统中如何添加自动启动程序
背景:在嵌入式系统中,需要开机自动启动所编写的程序【可执行文件】。 解决方法:原理就是Linux开机会自动执行一些文件。在/etc/profile中添加执行程序的脚本。/etc/profile 是一个系统级的配置文件,在用户登录Linux系统时自动执行…...
Linux之网络套接字
Linux之网络套接字 一.IP地址和端口号二.TCP和UDP协议2.1网络字节序 三.socket编程的常见API四.模拟实现UDP服务器和客户端五.模拟实现TCP服务器和客户端 一.IP地址和端口号 在了解了网络相关的基础知识之后我们知道了数据在计算机中传输的流程并且发现IP地址在其中占据了确定…...
LeetCode 2266.统计打字方案数:排列组合
【LetMeFly】2266.统计打字方案数:排列组合 力扣题目链接:https://leetcode.cn/problems/count-number-of-texts/ Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母,Alice 需要 按 对应字母 i 次,…...
Jmeter 动态参数压力测试时间段预定接口
🎯 本文档详细介绍了如何使用Apache JMeter进行压力测试,以评估预定接口在高并发场景下的性能表现。通过创建线程组模拟不同数量的用户并发请求,利用CSV文件动态配置时间段ID和用户token,确保了测试数据的真实性和有效性。文档中还…...
Learning Prompt
说明:这是我的学习笔记,很多内容转自网络,请查阅文章末尾的参考资料。 目录 基本要求(C.R.E.A.T.E)总结文章(Summarise)改写文章(Rewrite)根据参考资料回答问题(Question & Answer)参考资料 基本要求(C.R.E.A.T.E) Character This is th…...
微信消息群发(定时群发)-UI自动化产品(基于.Net平台+C#)
整理 | 小耕家的喵大仙 出品 | CSDN(ID:lichao19897314) 关联源码及工具下载https://download.csdn.net/download/lichao19897314/90096681https://download.csdn.net/download/lichao19897314/90096681https://download.csdn.net/download/…...
华为HuaweiCloudStack(一)介绍与架构
本文简单介绍了华为HCS私有云解决方案,并从下至上介绍HCS的整体架构,部署架构、部署方式等内容。 目录 HCS简介 HCS架构 纵向结构 ?管理平台类型 HCS节点类型 FusionSphere OpenStack CPS ServiceOM SC 运营面 OC 运维面 HCS部署架构 regi…...
【博客之星】2024年度个人成长、强化学习算法领域总结
📢在2025年初,非常荣幸能通过审核进入到《2024年度CSDN博客之星总评选》TOP300的年度评选中,排名40。这还是第一次来到这个阶段,作为一名博士研究生,还是备受鼓舞的。在这里我将以回顾的方式讲述一下这一年在CSDN中走过…...
Git 分支策略
文章目录 1. Git Flow2. GitHub Flow3. GitLab Flow4. Trunk-Based Development5. Release Flow分支最佳实践 Git 分支策略是组织和管理工作特性开发、协作和版本控制的技术。选择合适的策略取决于团队规模、项目需求和部署需求。以下是常见的 Git 分支策略: 1. Git…...
《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统
和组合导航一样,也可以通过预积分 IMU 因子加上雷达残差来实现基于预积分和图优化的紧耦合 LIO 系统。一些现代的 Lidar SLAM 系统也采用了这种方式。相比滤波器方法来说,预积分因子可以更方便地整合到现有的优化框架中,从开发到实现都更为便…...
Mysql学习笔记
连接数据库 找到 MySQL 安装目录下的 bin 目录,然后打开命令窗口,在命令窗口中按如下语法输入命令: mysql - h MySQL 数据库服务器的 IP 地址 - u 用户名 - p 然后按下回车键,输入密码即可 数据库操作 创建数据库 CREAT…...
Safari常用快捷键
一、书签边栏 1、显示或隐藏书签边栏:Control-Command-1 2、选择下一个书签或文件夹:向上头键或向下头键 3、打开所选书签:空格键 4、打开所选文件夹:空格键或右箭头键 5、关闭所选文件夹:空格键或左箭头键 6、更…...
OpenEuler学习笔记(二):用通俗的道理讲操作系统原理
用通俗的道理讲操作系统原理 基础概念类比 把OpenEuler操作系统想象成一个大型的工厂,这个工厂有各种各样的部门,每个部门都有自己的职责,共同协作来让整个工厂正常运转。内核就像是工厂的管理中心,它负责指挥和协调所有的工作。 …...
ros2-7.5 做一个自动巡检机器人
7.5.1 需求及设计 又到了小鱼老师带着做最佳实践项目了。需求:做一个在各个房间不断巡逻并记录图像的机器人。 到达目标点后首先通过语音播放到达目标点信息, 再通过摄像头拍摄一张图片保存到本地。 7.5.2 编写巡检控制节点 在chapt7_ws/src下新建功…...
使用 `scanpy` 观察 `AnnData` 对象内部数据结构
以下是使用 scanpy 观察 AnnData 对象内部数据结构的步骤: 一、导入必要的库: import scanpy as sc二、读取 AnnData 对象: 假设你的 AnnData 对象存储在一个文件中,例如 adata.h5ad,你可以使用以下代码读取它: adata = sc.read(adata.h5ad)如果你已经有了 adata 对象…...
《CPython Internals》阅读笔记:p232-p249
《CPython Internals》学习第 13天,p232-p249 总结,总计 18 页。 一、技术总结 无。 二、英语总结(生词:1) 1.overhead (1)overhead: over-(“above”) head(“top part, uppermost section”) overhead的字面意思是:above…...