深度学习pytorch——减少过拟合的几种方法(持续更新)

1、增加数据集

2、正则化(Regularization)

正则化:得到一个更加简单的模型的方法。

以一个多项式为例:

随着最高次的增加,会得到一个更加复杂模型,模型越复杂就会更好的拟合输入数据的模型(图-1),拟合的程度越大,表现在参数上的现象就是高次的系数趋近于0,如果直接将趋近于0的高次去掉,就可以得到一个更加简单的模型,这种方法称为正则化

图-1

 直观的看,经过正则化的模型更加平滑(图-2).

图-2

 正则化的方法:

(1)L1-正则化:在原来的模型基础上加上一个 1-范数(这里使用二分类模型作为示例):

 (2)L2-正则化:在原来的模型基础上加上一个 2-范数(这里使用二分类模型作为示例):

 代码示例:

# L2-正则化
device = torch.device('cuda:0')
net = MLP.to(device)
optimizer = optim.SGD(net.parameters,lr = learning_rate,weight_decay=0.01) #weight_decay=0.01就代表进行L2-正则化
criteoon = nn.CrossEntropyLoss().to(device)
# L1-正则化
# 对于L1-正则化,pytorch并没有提供直接的方法,就只能使用人工去做了
regularization_loss = 0
for param in model.parameters():                # 相求1-范数的总和regularization_loss += torch.sum(torch.abs(param))classify_loss = criteon(logits,target)
loss = classify_loss + 0.01*regularization_loss     # 再将得到的正则损失加入模型损失,其中0.01是1-范数总和前面的系数optimizer.zero_grad()
loss.backward()
optimizer.step()

3、加入动量(momentum)

动量即惯性——本次向哪移动,还需要考虑上一次移动的方向。

正常更新梯度的公式(公式-1):

公式-1

加入动量之后的公式(公式-2):

公式-2

将z(k+1)带入梯度更新公式,即公式-1减去,其中Z(k)相当于上一次的梯度,系数\alpha和β的大小决定了是当前梯度对方向的决定性大,还是上一梯度对方向的决定性大。

当动量为0时的梯度更新情况(图-3):

图-3

 动量不为0时的梯度更新情况(图-4):

图-4

将图-3和图-4对比,可以得出动量不为0,即考虑上一梯度,梯度更新更加稳定,不会出现巨大的跳跃情况,并且不加动量的没有找到最小点,一直在局部最小值点徘徊,如果加入动量,考虑到上一梯度,可以在一定程度上解决这种情况(图-4是加入动量之后最好的情况)。

代码演示,直接在优化器部分使用momentum属性就可以了,但是如果使用Adam优化器,就不需要添加,因为在Adam优化器内部定义的有momentum属性:

4、学习率(Learning Rate ) 

不同学习率梯度更新情况(图-5):

图-5

当学习率太小的时候,梯度更新比较慢,需要较多次的更新。

当学习率太大的时候,梯度更新比较激烈,找到的极值点Loss太大。

如何找到正确的的学习率?

在训练之初,可以先设置一个较大的学习率加快更新的速度,然后逐步减小学习率,即设置一个动态学习率。

图-6

 从图-6,可以看到有一个突然下降的点,这个点就是学习率训练一些数据之后,学习率突然变小导致的结果。在此之前可以看到Loss趋于不变,可以合理的猜测是因为学习率太大了,出现了来回摇摆不定的情况(图-7):

图-7

 当学习率突然减小,梯度更新变慢,易找到极小点(图-8):

图-8

 代码演示:

 5、dropout

dropout:减少神经元之间的连接,减少模型的学习量。标准的神经网络是全连接的,相比经过dropout的神经网络减少了一些连接(图-9)。

图-9

代码演示,可以使用Dropout方法断开连接,0.5代表断开两层之间的50% :

 这种方法被用在模型训练中,但当模型测试过程中,为了提高test的表现,要结束这个操作,将所有的连接都使用上,可以使用net_dropped.eval()方法结束这个操作,代码演示如下:

6、随机梯度下降 (Strochastic Gradient Descent )

这里的随机并不是指任意,这里面是有一套规则的,是一套映射的关系,即将原来的数据x送入f(x)得到一种分布。经过随机从原数据中得到一组小数据,使用这一小组数据训练模型。

 学习:课时60 Early stopping, dropout等_哔哩哔哩_bilibili

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

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

相关文章

Oracle中实现根据条件对数据的增删改操作——Merge Into

一、需求描述 在我们进行项目开发的过程中,会遇到这样的场景,需要根据某个条件对数据进行增、删、改的操作;遇到这种情况我们有2种方法进行解决: 方法一:①查询指定条件;②根据查询出的指定条件结果在执行…

阿里云国际DDoS高防的定制场景策略

DDoS高防的定制场景策略允许您在特定的业务突增时段(例如新业务上线、双11大促销等)选择应用独立于通用防护策略的定制防护策略模板,保证适应业务需求的防护效果。您可以根据需要设置定制场景策略。 背景信息 定制场景策略提供基于业务场景…

【图论 | 数据结构】用链式前向星存图(保姆级教程,详细图解+完整代码)

一、概述 链式前向星是一种用于存储图的数据结构,特别适合于存储稀疏图,它可以有效地存储图的边和节点信息,以及边的权重。 它的主要思想是将每个节点的所有出边存储在一起,通过数组的方式连接(类似静态数组实现链表)。这种方法的优点是存储空间小,查询速度快,尤其适…

金融投贷通--功能测试分析与设计

金融投贷通功能测试分析与设计 测试点分析借款业务测试点投资业务测试点 测试用例借款业务测试用例投资业务测试用例 缺陷面试题 测试报告 测试点分析 借款业务测试点 投资业务测试点 测试用例 借款业务测试用例 借款成功(主业务)、借款成功&#xff…

iOS——【CGD】

GCD 什么是GCD GCD指的是Grand Central Dispatch,它是苹果公司开发的一套多线程编程技术。GCD提供了一种简单而有效的方式来管理应用程序中的并发任务。它通过将任务提交到适当的队列(串行队列或并发队列)来管理并发执行的任务,…

WebAR开发简介

WebAR 开发使企业能够以独特且高度有趣的方式向客户和员工提供信息。 它提供增强现实 (AR) 内容,人们在智能手机上将其视为视觉叠加。 然而,WebAR 可在手机的普通网络浏览器上运行,无需下载任何应用程序。 WebAR 的多种用途包括帮助零售和在…

跟张良均老师学大数据人工智能——数据挖掘集训营开营

集训营特色: 知识点深入浅出,实现以学促用 以业务内容为主线,数据挖掘技能嵌入 多行业项目实战,全面提升职业素养 全程线上辅导,助力熟练掌握技能 惊喜优惠: 限时“六折”! 师傅带练 方向…

Qt|读写数据库管理图片资源工具

文章目录 创建项目设置UI布局控制数据库类实现界面实现类主函数 功能:用来管理数据库中图像资源 开发环境:windows10VS2017Qt5.14.2开发 创建项目 首先创建Qt Widgets Application next->next->finish就创建好了 设置UI布局 打开已经创建好的U…

笔记本如何调节亮度?笔记本亮度调节方法

对于经常长时间面对笔记本电脑的小伙伴们来说,屏幕亮度过暗或者过亮,都会对眼睛造成伤害。那么,我们如何调节笔记本亮度至适中呢?下面为大家介绍3种简单的调节屏幕亮度的方法,一起来看看吧! 笔记本亮度调节方法一: 1、…

Amuse:.NET application for stable diffusion

目录 Welcome to Amuse! Features Why Choose Amuse? Key Highlights Paint To Image Text To Image Image To Image Image Inpaint Model Manager Hardware Requirements Compute Requirements Memory Requirements System Requirements Realtime Requirements…

Electron 入门 - 创建应用的全流程 - npm 踩坑版

说明 本文记录一下,使用Electron创建一个简单的客户端应用的全流程。 在官方文档的基础上,针对依赖安装过程中出现的异常,进行了补充,确保可以正常的创建应用。 创建步骤 0、校验node版本 官方文档建议使用 最新版本的 NodeJS …

Codigger用户篇:安全、稳定、高效的运行环境(一)

在当今数字化时代,个人数据的安全与隐私保护显得尤为重要。为了满足用户对数据信息的安全需求,我们推出Codigger分布式操作系统,它提供了一个运行私有应用程序的平台,旨在为用户提供一个安全、稳定、高效的私人应用运行环境。Codi…

html 元素宽度自适应 占据剩余宽度

弹性盒实现 父元素设置display: flex; 需要自适应宽度的子元素设置flex: 1; <html lang"en"> <head><style>*{margin: 0;padding: 0;}.main{display: flex;}.box1,.box2{width: 100px;height: 200px;}.box1{background: rgb(134 187 233);}.box2…

【javaWeb 第五篇】后端-Http协议学习

HTTP协议 HTTP概述HTTP-请求数据格式HTTP响应格式HTTP-协议解析 HTTP概述 Hyper Text Transfer Protocol,超文本传输协议&#xff0c;规定了浏览器和服务器之间的数据传输规则 简述概念就是&#xff0c;浏览器需要向服务器发送请求&#xff0c;想要得到服务器中的数据&#xff…

2014年认证杯SPSSPRO杯数学建模B题(第一阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现&#xff1a; 图形&#xff08;或图像&#xff09;在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形&#xff0c;位图则使用像素来描述图像。一般来说&#…

Share-ChatGPT官网UI/文件上传/联网搜索/GPTS 一并同步

地址&#xff1a;Share-ChatGPT 文章目录 界面UI&#xff0c;GPTS&#xff0c;读论文&#xff0c;数据分析&#xff0c;写论文视频演示仓库地址 界面 支持多账号同时管理&#xff0c;合理利用资源&#xff1a; UI&#xff0c;GPTS&#xff0c;读论文&#xff0c;数据分析&a…

论文篇06-论文范文-论基于架构的软件设计方法ABSD及应用(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

试题 试题:论基于架构的软件设计方法(ABSD)及应用 基于架构的软件设计(Architecture-Based Software Design,ABSD)方法以构成软件架构的商业、质量和功能需求等要素来驱动整个软件开发过程。ABSD是一个自顶向下,递归细化的软件开发方法,它以软件系统功能的分解为基础…

Go语言学习Day3:数据类型、运算符与流程控制

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、数据类型①布尔类型②整型③浮点型④string⑤类型转换 2、运算符①算术运算符②逻辑运算符③关…

竞赛 python 爬虫与协同过滤的新闻推荐系统

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python 爬虫与协同过滤的新闻推荐系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&…

Go-Gin-Example 第八部分 优化配置接口+图片上传功能

文章目录 前情提要本节目标 优化配置结构讲解落实修改配置文件优化配置读取及设置初始化顺序第一步 验证 抽离file 实现上传图片接口图片名加密封装image的处理逻辑编写上传图片的业务逻辑增加图片上传的路由 验证实现前端访问 http.FileServerr.StaticFS修改文章接口新增、更新…