神经网络和深度学习-加载数据集DataLoader

news/2024/5/12 15:01:52/文章来源:https://blog.csdn.net/weixin_55500281/article/details/128090008

加载数据集DataLoader

Dataloader的概念

dataloader的主要目标是拿出Mini-Batch这一组数据来进行训练

在处理多维特征输入这一文章中,使用diabetes这一数据集,在训练时我们使用的是所有的输入x,在梯度计算采用的是随机梯度下降(SDG),每次选用一个样本来进行梯度计算,但存在缺点,优化时间过长

而在Mini-Batch中我们选择小批量中的所有样本,可以最大化的利用向量的优势,来提升计算速度

在使用Mini-Batch我们要了解三个概念

  • Epoch

  • Batch-Size

  • Iterations

首先我们来看一下Epoch,我们采用Mini-Batch之后要使用一个嵌套循环,内循环是每一次迭代都执行一个Mini-Batch,这两个循环相当于把所有的Mini-Batch都跑了一遍

在这里插入图片描述

Epoch的定义就是:所有训练样本都进行一次前向传播和反向传播的过程

Batch-Size的定义是:进行一次前馈和反馈的训练样本数量

Iterations的定义是:所有的样本/Batch-Size

Dataloader的作用

我们要做小批量的训练时,要确定一些重要的参数

  • batch-size

  • shuffle:打乱顺序,为了提高数据样本的随机性可以选择对数据集进行shuffle

  • num_workers :并行操作的数量

  • [i]:支持索引

  • len:长度

在这里插入图片描述

定义Dataset和DataLoader

我们来看一下代码中是如何定义dataset的,在torch.utils.data工具包中包含了这两个类

其中dataset是一个抽象的类,不能实例化,只能被其他的子类继承,我们想要使用的时候必须定义一个自己 的类来继承使用

dataloader是用来帮助加载数据的,我们可以实例化一个dataloader

例如下面自定义一个DiabetesDataset的类

在这里插入图片描述

getitem这个方法是一个模板方法,是为了实例化这个对象之后能够支持下标操作,通过索引来取出数据

len这个方法同样是模板方法,为了返回数据集中的数据条数

接下来就可以用自定义的DiabetesDataset类来实例化dataset对象

我们在构造数据集的时候一般有两种选择

  • 把所有数据在init中加载进来,放入内存中,再用getitem根据索引传出数据,适用于数据集本身的容量不大

  • 类似于图像、语音这种非结构的大数据集,不能一次性加载到内存中时,定义一个列表,数据集里面得每一条数据的文件名放入相应的列表中

📌我们在windows中使用num_workers进行训练会报错,原因是在windows下和Linux下的进程库是不一样的。所以用spawn替代了fork,所以其中处理的方式不同,会出现RuntimeError

📌解决方法:将要训练的代码train_loader进行封装起来(if语句或者是函数中)

在这里插入图片描述

我们在代码中进行改动

在这里插入图片描述

数据集的实现

在构造函数中我们需要一个filepath:描述文件来自什么地方,其次需要通过self.len来获取数据集的长度

在这里插入图片描述

DataLoader的使用

使用enumerate可以获得当前迭代的次数,train_loader中拿出来的元组(x,y)放入data中,所以在训练之前把inputs(x_data)和labels(y_data)从data中取出,此时这两个数据都是Tensor。

也可以一开始就在for循环中使用i,(x,y),就可以省去下面那句

在这里插入图片描述

完整代码

import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader# prepare dataset
class DiabetesDataset(Dataset):def __init__(self, filepath):xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32)self.len = xy.shape[0]  # shape(多少行,多少列)self.x_data = torch.from_numpy(xy[:, :-1])self.y_data = torch.from_numpy(xy[:, [-1]])def __getitem__(self, index):return self.x_data[index], self.y_data[index]def __len__(self):return self.lendataset = DiabetesDataset('diabetes.csv.gz')
train_loader = DataLoader(dataset=dataset, batch_size=32, shuffle=True, num_workers=2)  # num_workers 多线程# design model using class
class Model(torch.nn.Module):def __init__(self):super(Model, self).__init__()self.linear1 = torch.nn.Linear(8, 6)self.linear2 = torch.nn.Linear(6, 4)self.linear3 = torch.nn.Linear(4, 1)self.sigmoid = torch.nn.Sigmoid()def forward(self, x):x = self.sigmoid(self.linear1(x))x = self.sigmoid(self.linear2(x))x = self.sigmoid(self.linear3(x))return xmodel = Model()# construct loss and optimizer
criterion = torch.nn.BCELoss(size_average=True)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# training cycle forward, backward, update
if __name__ == '__main__':for epoch in range(100):for i, data in enumerate(train_loader, 0):  # train_loader 是先shuffle后mini_batch# 1. prepare datax_data, y_data = data# 2. Forwardy_pred = model(x_data)loss = criterion(y_pred, y_data)print(epoch, i, loss.item())# 3. Backwardoptimizer.zero_grad()loss.backward()# 4. Updateoptimizer.step()

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

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

相关文章

用 Java 实现爬虫 (爬取本地html中的人物信息并可视化人物关系)

目录 爬虫简介 常用的工具框架 selenium Jsoup Jsoup介绍 Jsoup的主要功能如下: HTML 相关知识 通过Jsoup元素获取 案例 爬取本地html中的角色信息 HtmlParseUtil 可以利用relation-graph 将人物关系可视化 使用爬虫要注意 查看网站的爬虫协议 爬虫简介…

黑群晖从入门到入土,自编译适合自己硬件的黑群晖7.1.x引导(黑群晖DSM7.X引导用arpl编译教程)

写在前面的话 没啥好说的,只需要感谢在GitHub上开源代码的巴西老哥就好,好了废话不多说直接开始。 黑群晖DSM7.X引导用arpl编译教程写在前面的话一、需要的软硬件清单二、制作引导盘1、下载arpl镜像2.1.1、制作PE启动盘,这是使用msata硬盘或…

胎儿产科生长发育曲线 ,体重估计,公式和绘图、参考文献、python代码

1. 参考资料 Leung TN, Pang MW, Daljit SS, Leung TY, Poon CF, Wong SM, Lau TK. Fetal biometry in ethnic Chinese: biparietal diameter, head circumference, abdominal circumference and femur length. Ultrasound Obstet Gynecol. 2008 Mar;31(3):321-7. doi: 10.1002…

覆盖libc.so.6的惨痛教训

覆盖libc.so.6的惨痛教训背景问题原因解决1、当前session未断开2、OS崩溃重启,所有ssh session断开惨痛教训1、对于上产环境的内核依赖库文件不能随意覆盖、删除。2、 scp 文件覆盖问题总结参考背景 发生时间: 2022年11月28日08:55:20 偷了个懒,在安装t…

发现智能合约中的 bug 的 7 个方法

寻找智能合约bug可能是一项高回报的工作,而且它也保护了生态系统免受黑客攻击。我最近有幸采访了一位开发人员,他发现了一个价值 70 亿美元的错误,并因报告该错误而获得了 220 万美元的报酬。 在这篇文章中,我将详细介绍该开发人…

SpringCloud-alibaba-Nacos 从理论到落地使用

Nacos: Dynamic Naming and Configuration Service 就是: 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。、 下面是生态图: Nacos EurekaConfig Bus 即 Nacos就是注册中心 配置中心的组合 他能干什么呢? 1、替代Eu…

Azure CDN

Azure CDN Azure CDN 是服务器的分发网络,可以将网页内容更高效地分发给终端用户。 CDN在POP点的边缘服务器缓存内容,这样更临近终端用户,延迟低。 Azure CDN 给开发者提供全球解决方案,能够将内容放在全球各个节点,提…

Android——Theme和Style-由浅入深,全面讲解

1、官方详细解读 样式和主题背景 | Android 开发者 | Android Developers 2、应用场景 类似web设计中css样式。将应用设计的细节与界面的结构和行为分开。 样式style :应用于 单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性 主题theme&…

[附源码]计算机毕业设计springboot动物保护协会网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

使用EL表达式时,PropertyNotFoundException异常的解决过程

一. 业务场景 最近,杨哥的一个班级正在做基于JSPJSTL/EL Servlet JavaBean JDBC MySQL技术方案的阶段项目。其中有一个需求是根据多条件动态搜索商品信息,最终分页显示出商品列表。这个功能可以在dao层采用多分支条件组合,显示页面使用JST…

[Linux](15)线程基础,线程控制,线程的互斥与同步

文章目录前言Linux 线程概念线程的优点线程的缺点线程异常线程用途使用pthread_createpthread_join线程退出线程id分离线程线程互斥问题:临界资源访问问题问题解决:互斥锁的使用RAII 风格的加锁方式可重入 & 线程安全死锁的概念线程同步条件变量生产…

C语言——指针(入门详解)

文章目录1.什么是指针?1.1.理解指针的两个要点:1.2.指针变量:1.3.内存是如何编址?2.指针和指针类型2.1指针的创建与初始化2.2.指针类型3.野指针3.1.什么视野指针?3.2.野指针成因3.3.规避野指针4.指针运算4.1.指针-整数…

【MySQL】数据库服务器硬件优化与实战详解(调优篇)(实战篇)(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

【一文秒懂——SLF4j日志】

目录 1. SLF4j日志 2. 日志输出 1. SLF4j日志 在添加了spring-boot-starter的项目中,已经包含了SLF4j日志的相关依赖项。 在添加了lombok的项目中,可以在类上添加Slf4j注解,则lombok框架会在编译期在类中声明名为log的变量,通…

2022Flink大数据比赛项目-焦点科技大数据编程大赛

文章目录0.数据获取1.需求概要2.数据标准2.1.输入数据格式2.2.输出数据格式2.3.数据主键及关系3.表详细1.order_info2.bill_info3.bill_item4.ord_pay5.ord_pay_log6.pay_method7.pay_bank_card4.开发工具、语言版本、工具版本5.赛题解答数据分流任务1任务2任务3小结附录0.数据…

聊聊雪花算法?

随便聊聊 哈喽,大家好,最近换了份工作,虽然后端技术栈是老了点,但是呢,这边的前端技术确是现在市面上最新的那一套技术:Vue3ViteTSXPinaElement-PlusNativeUI。我本人主要是学后端的,确被拉去做…

【博客545】从交换机视角看四种报文:广播、组播、未知单播、已知单播

从交换机视角看四种报文:广播、组播、未知单播、已知单播 交换机视角的四种报文 对于二层交换机来说,它在转发报文时,只有四种类型的报文: 1、广播 2、组播 3、未知单播 4、已知单播。四种报文剖析 1、二层广播报文 当二层交换…

SignalR简介及实践指南

SigalR简介 ASP.NET Core SignalR 是一个开放源代码库,可用于简化向应用添加实时 Web 功能。 实时 Web 功能使服务器端代码能够将内容推送到客户端。 适合 SignalR 的候选项: 需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖…

易观千帆 | 2022年10月银行APP月活跃用户规模盘点

易观分析:易观千帆数据显示,10月手机银行服务应用活跃人数52285.79万,环比下降3.52%。手机银行服务应用月活规模经历了连续5个月的持续增长后,10月出现下降。 10月城商行手机银行服务应用活跃人数3565.56万,环比下降2…

UNIAPP实战项目笔记46 订单确认页面的布局

UNIAPP实战项目笔记46 订单确认页面的布局 实际案例图片 订单页面 具体内容图片自己替换哈&#xff0c;随便找了个图片的做示例 具体位置见目录结构 完善布局页面和样式 代码 confirm-order.vue部分 confirm-order.vue 确认订单页面布局和渲染 flex 样式布局 <template>…