pytorch中的dataset和dataloader

  PyTorch为我们提供了Dataset和DataLoader类分别负责可被Pytorch使用的数据集的创建以及向训练传递数据的任务。一般在项目中,我们需要根据自己的数据集个性化pytorch中储存数据集的方式和数据传递的方式,需要自己重写一些子类。
  torch.utils.data.Dataset 是一个表示数据集的抽象类。任何自定义的数据集都需要继承这个类并覆写相关方法。数据集主要有两个功能,一个是读取本地的数据集并储存起来,另外一个是负责处理索引(index)到样本(sample)映射。
  因此,在定义自己的数据集时,一般我们需要重写init,getitem,len这三个方法,在init中,执行加载数据集和储存数据集的任务,getitem中执行根据索引(index)从数据集中取出一个样本。len方法则返回数据集中的样本数。
例子:

import torch
import torch.utils.data.dataset as Dataset#创建子类
class mydataset(Dataset.Dataset):#初始化,定义数据内容和标签def __init__(self, Data, Label):self.Data = Dataself.Label = Label#返回数据集大小def __len__(self):return len(self.Data)#得到数据内容和标签def __getitem__(self, index):data = torch.Tensor(self.Data[index])label = torch.Tensor(self.Label[index])return data, label

  在我们创建了自己的dataset后,就可以用这个dataset创建我们的dataloader了,一般来说在PyTorch项目中加载数据集的流程是这样的: 1. 创建Dateset。 2. 将Dataset作为参数传递给DataLoader,创建dataloader。 3. DataLoader迭代按照batch大小产生训练数据提供给模型。dataloader的定义为:

DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,batch_sampler=None, num_workers=0, collate_fn=None,pin_memory=False, drop_last=False, timeout=0,worker_init_fn=None)

  解释其中几个比较关键的:dataset就是我们自己重写后的数据集;batch_size是超参,即设置的batch大小;shuffle是否打乱数据;drop_last是否截断数据(如果样本数量与batchsize不能整除的情况下);num_workers是同时参与数据读取的线程数量,多线程技术可以加快数据读取,但是如果项目不大,设置为0就行,免得引入新问题;collate_fn,数据整理函数,这个方法可以被传递进去,把一个batch的数据变成你想要的样子。
  给一个自定义的collate_fn函数的例子:

def collate_fn(data):img = [i[0][0] for i in data]txt = [i[0][1] for i in data]labels = [i[1] for i in data]img = torch.stack(img).cuda()txt = torch.stack(txt).cuda()labels = torch.LongTensor(labels).cuda()return img, txt ,labels

那么我们的一般流程为:

# 创建Dateset(自定义)dataset = mydataset() 
# Dataset传递给DataLoaderdataloader = DataLoader(dataset,batch_size=64,shuffle=False,num_workers=8,collate_fn=my_collate_fn)
# DataLoader迭代产生训练数据提供给模型for i in range(epoch):for index,(img,txt,label) in enumerate(dataloader):pass

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

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

相关文章

微信小程序-分包

分包 1.什么是分包 分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 2.分包的好处 对小程序进行分包的好处主要有以下两点: 可以优化小程序首次启动的下载时间…

数据结构入门(3)2.链表接口实现

目录 前言 头文件 动态申请一个结点 单链表打印 单链表尾插 单链表的头插 单链表的尾删 单链表头删 单链表查找 单链表在pos位置之后插入x 单链表删除pos位置之后的值 在pos的前面插入 删除pos位置 销毁顺序表 前言 本文将介绍链表常见的功能的实现 头文件 #…

《互联网的世界》第六讲-去中心化和安全

互联网构建于开放互联的中立原则之上,公平接入,数据互联互通,流量被无差别对待,这意味着互联网本质上是匿名,去中心的,这与我们的现实世界完全不同。 但互联网上的主流业务却是 c/s 产销模式,试…

JAVA实战开源项目:校园失物招领管理系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 校园失物招领…

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置前言第1章 设置字体颜色第2章 设置字体大小第3章 设置代码区背景颜色总结 前言 编程软件环境最好就设置一个自己喜欢的界面进行显示,这样看起来会比较舒服些…

数据库的检索知识

在数据库中,检索数据通常是通过 SQL 查询来实现的。以下是针对全称检索和模糊检索的一些常见 SQL 查询示例: ### 1. 全称检索: 全称检索是指精确匹配某个字段的值,只检索与指定条件完全匹配的记录。 例如,假设有一个…

测试开发 - 一面凉经 - 好未来

2024.3.09 约面 2024.3.11 面试 自我介绍 学校地点确认 毕业年份确认 项目介绍 - 聊天平台日志分析 具体分析了哪些指标 没有针对内容做分析吗 可视化展示是展示的什么内容呀 为什么作为一款聊天平台,用户常用词没有分析呢 用户是哪里来的 实习时自动化测…

026—pandas 根据文本数据提取特征

前言 在数据处理中,源数据可能具有一定便于记录但又复杂的结构,我们在后续使用数据时还需要进一步进行处理。在本例中,要根据一列数据提取出数据中的相关特征,我们来看看 pandas 是如何完成的。 需求: 以上数据的 a …

CKB转型为BTC Layer2后月涨超 300%,还有哪些转型热门赛道的老项目?

虽然说牛市下,炒新不炒旧。但一些渡过漫长熊市的老牌项目方,重新回到牌桌前开始新叙事后,市场依然有人买单。 部分项目方已经初步尝到了甜头,Arweave(AR)宣布从去中心化数据存储转换到「以太坊杀手」后&am…

网络攻防中nginx安全配置,让木马上传后不能执行、让木马执行后看不到非网站目录文件、命令执行后权限不能过高

网络攻防中nginx安全配置,让木马上传后不能执行、让木马执行后看不到非网站目录文件、命令执行后权限不能过高。 0x01 Nginx介绍 nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发…

腾讯qlv格式转换mp4,亲测可解决,免费领取

问题描述 最近想兼职做自媒体,最初想法是想把腾讯视频上的资源下载到本地,本地做一些剪辑和图文配音发布到自媒体app上,但是我还是幼稚了,下载到腾讯的视频居然是qlv加密的,用自带的腾讯视频才能看,网上找了一大堆转换方法,全是广告,什么cmd进去用命令行转的,什么找到…

大数据 - Spark系列《十三》- spark集群部署模式

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

MySQL 中常用的存储引擎

1、MySQL中的存储引擎 MySQL支持多种数据库引擎,每种引擎都有其特定的优势和适用场景。 1.1 InnoDB: 这是MySQL的默认数据库引擎。它提供了事务安全(ACID兼容)的表,支持行级锁定和外键约束。InnoDB还具有崩溃恢复能…

大数据开发(Java面试真题)

大数据开发(Java面试真题) 一、Java基本概念和数据结构1、请解释Java中HashMap和HashTable的区别?2、Java中ThreadLocal的原理是什么?3、请简要说明Java中equals()和hashCode()的作用及区别?4、Java中的四种访问修饰符…

五、OpenAI实战之Assistants API

在8线小城的革委会办公室里,黑8和革委会主任的对话再次展开。 黑8:主任,您知道吗?除了OpenAI API,现在还有一项新的技术叫做Assistants API,它可以帮助我们更好地进行对话和沟通。 主任:Assis…

性能优化-卡牌项目渲染优化

优化的方向 CPU 影响帧率 GPU 影响帧率 内存 超了会崩 显存 显存超了画面会异常,甚至可能导致游戏崩溃 带宽 影响耗电 分辨率 设备性能不行又要求流畅,降低目标渲染分辨率,立竿见影,但是会牺牲画质 场景 1 使用烘焙…

Vue:自动按需导入element-plus图标,动态导入

在 Vue3 中,component 动态组件的 is 属性必须绑定的是组件实例,而不是组件名字 所以需要在JS里面导入组件,创建一个对象存储,利用键值对,返回组件 如何配置自动导入看上一篇:https://blog.csdn.net/ruanc…

Java网络编程详解

目录 网络编程 1、概述 2、网络通信的要素 3、IP 4、端口 5、通信协议 6、TCP 文件上传 Tomcat 7、UDP 单方发送单方接受 双方发送接收 8、URL URL测试 URL下载网络资源 网络编程 1、概述 信件: 计算机网络: 计算机网络是指将地理位置不…

WPF —— TextBlock、LineBreak RadioButton控件详解

一:TextBlock 1&#xff1a;TextBlock 简介 <LineBreak/> 换行 显示文本 标签内容和content属性共存 2、TextBlock 常用的属性 Foreground&#xff1a;TextBlock的文本内容的颜色。 Background&#xff1a;背景&#xff0c;获取或设置要用于填充内容区域背景的 Brush…

冒泡排序的理解与实现【C语言、C++、java】

冒泡排序介绍 冒泡排序(Bubble Sort)&#xff0c;又被称为气泡排序或泡沫排序。 它是一种较简单的排序算法。它会遍历若干次要排序的数列&#xff0c;每次遍历时&#xff0c;它都会从前往后依次的比较相邻两个数的大小&#xff1b;如果前者比后者大&#xff0c;则交换它们的位…