【深度学习】(9)--调整学习率

文章目录

  • 调整学习率
    • 一、学习率的定义
    • 二、学习率的作用
    • 三、实现调整学习率
      • 1. 使用库函数进行调整
      • 2. 手动调整学习率
  • 总结

调整学习率

调整学习率的目的是:通过调整学习率,优化训练速度、提高训练稳定性、适应不同的训练阶段以及改善模型性能。那么,学习率是如何影响模型的呢?我们又该如何调整学习率呢?

一、学习率的定义

学习率(Learning Rate),也称为步长,是深度学习中控制参数更新步长的一个超参数。在每一次迭代中,学习率决定了基于损失函数梯度的参数更新幅度。它决定了模型在优化过程中向损失函数最优解移动的步长大小。

二、学习率的作用

  1. 控制参数更新的步长:学习率直接决定了在每次迭代中,参数根据梯度调整的幅度。过大的学习率可能导致参数更新幅度过大,从而在最优解附近震荡甚至发散;而过小的学习率则可能导致收敛速度过慢。
  2. 平衡速度与稳定性:合理的学习率需要在保证模型稳定收敛的同时,尽可能提高训练速度。过高的学习率可能导致模型训练不稳定,而过低的学习率则可能使训练过程过于缓慢。

由上可知,学习率是深度学习中的一个关键参数,它直接影响到模型的训练效果和收敛速度。选择合适的学习率对于训练一个高性能的深度学习模型至关重要。过高的学习率可能导致模型发散或震荡,而过低的学习率则可能使训练过程过于缓慢甚至无法收敛到最优解

所以,我们要对学习率进行调整。

三、实现调整学习率

调整学习率有两种方法:1.使用库函数进行调整;2.手动调整学习率

1. 使用库函数进行调整

Pytorch学习率调整策略通过 torch.optim.lr_sheduler 接口实现。并提供3种调整方法:有序调整、自适应调整以及自定义调整。

  • (1)有序调整:等间隔调整(Step),多间隔调整(MultiStep),指数衰减(Exponential),余弦退火(CosineAnnealing);

如下图所示:x轴为迭代次数,y轴表示学习率

在这里插入图片描述

  1. 等间隔调整(Step)

等间隔调整学习率是一种简单直接的方法,它按照预定的间隔(通常是epoch数)来调整学习率。每次调整时,学习率会乘以一个预设的衰减因子(gamma)。这种方法适合于训练过程较为稳定,且需要逐步减小学习率以避免过拟合的场景。

torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1)
参数:
optimizer: 神经网络训练中使用的优化器,如optimizer=torch.optim.Adam()
step_size(int): 学习率下降间隔数,单位是epoch,而不是iteration.
gamma(float):学习率调整倍数,默认为0.1
每训练step_size个epoch,学习率调整为lr=lr*gamma.

代码体现:

注意:在每个epochs迭代训练时,使用**scheduler.step()**语句进行学习率更新。

optimizer = torch.optim.Adam(model.parameters(),lr=0.001,weight_decay=0.0001)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer,step_size=5,gamma=0.5)epochs = 80
train_dataloader = DataLoader(training_data,batch_size=64,shuffle=True)
test_dataloader = DataLoader(test_data,batch_size=64,shuffle=True)
for t in range(epochs):print(f"Epoch {t+1} \n-------------------------")train(train_dataloader,model,loss_fn,optimizer)test(test_dataloader,model,loss_fn)scheduler.step()
  1. 多间隔调整(MultiStep):

与Step方法类似,但可以在多个预设的epoch点进行学习率衰减,每个点可以有不同的衰减比例。这种方法提供了更多的灵活性来适应复杂的训练过程。

torch.optim.lr_shceduler.MultiStepLR(optimizer, milestones, gamma=0.1)
参数:
milestone(list): 一个列表参数,表示多个学习率需要调整的epoch值,如milestones=[10, 30, 80].
  1. 指数衰减(Exponential):

学习率按照指数形式进行衰减,衰减速度由衰减率(gamma)控制。这种方法适用于模型训练初期需要较大学习率以快速收敛,后期需要较小学习率以微调模型参数的情况。

torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma)
参数:
gamma(float):学习率调整倍数的底数,指数为epoch,初始值我lr, 倍数为γ的epoch次方
  1. 余弦退火(CosineAnnealing):

学习率按照余弦函数进行周期性调整,先下降后上升,形成多个学习率的波峰和波谷。这种方法有助于模型跳出局部最优解,探索更广阔的参数空间。

torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0)
参数:
Tmax(int):学习率下降到最小值时的epoch数,即当epoch=T_max时,学习率下降到余弦函数最小值,当epoch>T_max时,学习率将增大;
etamin: 学习率调整的最小值,即epoch=Tmax时,lrmin=etamin, 默认为0.
  • (2)自适应调整:依训练状况伺机而变,通过监测某个指标的变化情况(loss、accuracy),当该指标不怎么变化时,就是调整学习率的时机(ReduceLROnPlateau);
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1,
patience=10,verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)
-- optimizer (Optimizer): 要调整学习率的优化器(如 SGD, Adam 等)。
-- mode (str, 可选): 指定触发学习率减少的条件。'min' 模式意味着当指标停止下降时减少学习率(即,当指标达到局部最小值				时)。'max' 模式则意味着当指标停止上升时减少学习率。默认值为 'min'-- factor (float, 可选): 学习率减少的因子。新的学习率将是旧学习率乘以这个因子。默认值为 0.1-- patience (int, 可选): 容忍多少个 epoch 指标没有改善后减少学习率。例如,如果 patience=10,则指标在 10 个 epoch 内没有		改善后,学习率将被减少。默认值为 10-- verbose (bool, 可选): 如果为 True,则在每次更新学习率时打印一条消息。默认值为 False-- threshold (float, 可选): 阈值,用于判断指标是否“真正”没有改善。只有当指标的变化小于这个阈值时,才认为指标没有改善。这有助			于避免由于指标的小幅波动而频繁调整学习率。默认值为 1e-4-- threshold_mode (str, 可选): 阈值的比较模式。'rel' 表示相对模式,即阈值是相对于当前最佳指标的百分比;'abs' 表示绝对模			式,即阈值是绝对数值。默认值为 'rel'-- cooldown (int, 可选): 在学习率被减少之后,等待多少个 epoch 再重新考虑是否减少学习率。这有助于在减少学习率后给模型一些时间		来适应新的学习率。默认值为 0,表示不等待。
-- min_lr (floatlist, 可选): 学习率的最小值。如果为单个浮点数,则所有参数组的学习率都不会低于这个值。如果为列表,则每个参		数组的学习率都不会低于列表中对应位置的值。默认值为 0-- eps (float, 可选): 用于提高数值稳定性的小常数。当两个指标值非常接近时,它有助于避免除以零的错误。默认值为 1e-8
  • (3)自定义调整:通过自定义关于epoch的lambda函数调整学习率(LambdaLR)。
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda)
参数:
lr_lambda(function or list): 自定义计算学习率调整倍数的函数,通常时epoch的函数,当有多个参数组时,设为list.

2. 手动调整学习率

手动调整学习率通常涉及在训练循环中定期检查模型的性能(如验证集上的损失或准确率),并根据这些性能指标来更新学习率。

比如:

# 训练循环  
for epoch in range(num_epochs):  # 训练模型(省略具体代码)  train(model, optimizer, train_loader)  # 评估模型在验证集上的性能(省略具体代码)  val_loss = validate(model, val_loader)  # 根据验证集损失手动调整学习率  # 这里只是一个简单的示例,实际中你可能需要更复杂的逻辑  if epoch % 10 == 0:  # 每10个epoch检查一次  if val_loss < best_val_loss:  # 假设best_val_loss在循环外初始化  best_val_loss = val_loss  else:  # 如果验证损失没有改善,则减少学习率  for param_group in optimizer.param_groups:  param_group['lr'] *= 0.1  # 将学习率乘以0.1 

通过验证集损失,来调整学习率。

总结

本篇介绍了:

  1. 通过调整学习率能够优化训练速度、提高训练稳定性、适应不同的训练阶段以及改善模型性能。
  2. 调整学习率有两种方法:1.使用库函数进行调整;2.手动调整学习率
  3. Pytorch学习率调整策略通过 torch.optim.lr_sheduler 接口实现。并提供3种库函数调整方法:有序调整、自适应调整以及自定义调整。
  4. 在库函数调整方法中,注意在每个epochs迭代训练时,使用**scheduler.step()**语句进行学习率更新。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

不可错过的10款文件加密软件,企业电脑加密文件哪个软件好用

在信息安全日益重要的今天&#xff0c;企业和个人都需要可靠的文件加密软件来保护敏感数据。以下是2024年不可错过的10款文件加密软件&#xff0c;它们以强大的加密功能和易用性而闻名。 1.安秉加密软件 安秉加密软件是一款专为企业设计的信息安全管理工具&#xff0c;采用驱动…

Android系统应用安装完成后是如何通知其他应用的?

文章目录 具体步骤如下&#xff1a;相关的系统广播&#xff08;Actions&#xff09;&#xff1a;总结&#xff1a; Android系统在应用安装完成后&#xff0c;会通过 广播&#xff08;Broadcast&#xff09;的方式通知其他应用。这个广播称为"应用安装完成广播"&…

IBM开源新模型,可完美、快速转换PDF文档格式,附源码详细部署教程使用教程

IBM开源新模型&#xff0c;可完美、快速转换PDF文档格式&#xff0c;附源码详细部署教程使用教程。 docling 是一个由 DS4SD&#xff08;Data Science for Social Development&#xff09;团队开发的开源项目&#xff0c;旨在帮助文档化软件项目。该项目提供了一个基于 Flask 的…

在 OpenEuler 中配置 KVM 虚拟化环境指南

本指南旨在为读者提供一个详细的步骤说明&#xff0c;帮助大家在 OpenEuler 系统中配置 KVM 虚拟化环境。无论您是初学者还是有一定经验的用户&#xff0c;这份指南都将涵盖从环境准备、安装到虚拟机管理的各个方面&#xff0c;确保您能够顺利地搭建并管理自己的虚拟化平台。 …

写一个算法统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这十个数字)

题目分析&#xff0c;一共需要最多需要36个位置的数组&#xff0c;我们把前十个数组位置给0-9个数字字符存放空间&#xff0c;10-36的数组空间给到A-Z的存放 int main() {printf("请输入一串字符串内容,并且以#结束输入\n");char arr[36], ch;//26个大写字符10个数字…

重磅!2025年国自然项目指南,发布时间确定!

9月25日&#xff0c;基金委官网发布《《2025年度国家自然科学基金项目指南》征订通知》&#xff0c;据通知&#xff0c;《2025年度国家自然科学基金项目指南》预计于2025年1月中旬正式出版&#xff0c;届时将以电子和纸质两种形式同步刊出&#xff0c;纸质版48元\套&#xff0c…

高校实训产品:教育AI人工智能实训与科研解决方案

保持前沿、提升就业、低成本的教育AI实训全场景方案 产品概述 AIGC实训云图站解决方案为高校提供了灵活、高效的人工智能实训平台。通过弹性裸金属调度技术和GPU虚拟化&#xff0c;实现高性能与低成本的兼顾&#xff0c;为学生和教师提供不受时间和空间限制的实操机会。平台涵…

SpringBoot使用validation进行自参数校验

一&#xff1a;介绍 在 SpringBoot 项目开发中&#xff0c;很多与数据库交互的参数需要校验数据正确性。很多小伙伴会把参数判断写进代码里&#xff0c;但是这种写法往往会有低可读性以及多处使用的时候&#xff0c;需要变更验证规则时&#xff0c;不易于维护等缺点。今天给大家…

五秒Al绘画出图,全球最快的Stable Diffusion教程又来了!秋葉SD零基础入门到精通教程

大家好&#xff0c;我是强哥 今年刷爆全网的Stable Diffution 最近出了无需安装的版本&#xff0c;还支持中文使用&#xff01; 但是很多小伙伴说不会用 所以给大家找来了中文教程 非常好上手哦&#xff01; AI绘画Stable Diffusion视频教程 帮助你更好的上手SD智能绘画 …

基于Java+SQL Server2008开发的(CS界面)个人财物管理系统

一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展&#xff0c;计算机在管理方面应用的旁及&#xff0c;利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的&#xff0c;其次对个人财务管理…

回归预测|基于蜣螂优化长短期记忆网络的数据回归预测Matlab程序DBO-LSTM 多特征输入单输出 含基础LSTM

基于蜣螂优化长短期记忆网络的数据回归预测Matlab程序DBO-LSTM 多特征输入单输出 含基础LSTM 文章目录 一、基本原理DBO-LSTM 多特征输入单输出回归预测的原理和流程2.1 蜣螂优化&#xff08;DBO&#xff09;2.2 长短期记忆网络&#xff08;LSTM&#xff09;3.1 数据准备3.2 模…

代码随想录算法训练营第45天 动态规划part12 |题目: 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇

代码随想录算法训练营第45天 动态规划part12 |题目&#xff1a; 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇 文章来源&#xff1a;代码随想录 题目名称&#xff1a;115.不同的子序列 给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子…

源码-基于springBoot精准扶贫管理系统

注册 功能概述 提供帮扶干部自助注册功能&#xff0c;注册登记个人基本信息、所在单位等&#xff0c;管理组织审核和帮扶配对后&#xff0c;注册账号即可登录使用。 使用角色&#xff1a;帮扶人员 贫困户档案管理 功能概述 要是建立和查看贫困户档案&#xff0c;包括家庭信息、…

Python(五)-函数

目录 函数的定义与调用 特点 语法格式 函数的参数 函数的返回值 函数嵌套调用 变量的作用域 局部变量 全局变量 函数的多种参数 位置参数 关键字参数 默认参数 可变参数 函数的定义与调用 python函数需要使用def关键字来定义,需要先定义,后调用 特点: 先定义…

遍历递归数结构,修改里的disabled值

返回参数中新增字段 disabled,后端给的值为1和2, disabled1时&#xff0c;代表该节点需要置灰&#xff0c;不可选中 现在需要将disabled的值,改为布尔类型; 后端给的数结构是对象类型,tree接收数组类型; 先将对象类型的数据,遍历递归,修改里面的disabled值,最后再加[ ],改为…

vue项目中的node、node-sass、sass-loader之间的版本关系

这个报错&#xff0c;想必大部分人都会遇到&#xff0c;版本不适配的问题&#xff0c;记录下解决方案。 版本适配问题 node 与node-sass node-sass与sass-loader sass-loader 4.1.1&#xff0c;node-sass 4.3.0sass-loader 7.0.3&#xff0c;node-sass 4.7.2sass-loader 7.3.…

负载均衡--相关面试题(六)

在负载均衡的面试中&#xff0c;可能会遇到一系列涉及概念、原理、实践应用以及技术细节的问题。以下是一些常见的负载均衡面试题及其详细解答&#xff1a; 一、什么是负载均衡&#xff1f; 回答&#xff1a;负载均衡是一种将网络请求或数据传输工作分配给多个服务器或网络资源…

RK 方案VOP 显示接口的链接关系以及DTS如何配置

这图显示各vp 支持情况 如下图VP0 支持DSI0 DSI1 EDP LVDS HDMI 显示接口&#xff0c;如果我们一方案需要点MIPI 屏 和HDMI out, 如果VP0 链接MIPI DSI0 那么VP0 就不能再选择了&#xff0c;只能VP1 链接HDMI out 了。因为VP2不至此HDMI&#xff0c;所有就只有选择VP1 链接HDMI…

磁盘分区与固件启动

扇区是磁盘读写的基本单位&#xff0c;是磁头从磁盘中读取数据的最小单位&#xff0c;一般是512B&#xff08;现代磁盘还有4 KB&#xff09;&#xff0c;多个相邻的扇区组合在一起形成一个簇。其中磁盘的第一个扇区特别重要&#xff0c;它存储了磁盘分区表。 早期磁盘的第一个…

尚硅谷----智尚代驾项目----Day7(续)------预估乘客订单数据之Drools

Hello uu 们&#xff01;感谢你们的收看&#xff0c;话不多说&#xff0c;今天开始我们的Drools之旅 Drools介绍 drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎&#xff0c;可以将复杂且多变的业务规则从硬编码中解放出来&#xff0c;以规则脚本的形式存放在文…