CV Method:超全学习率策略总结

文章目录

  • 前言
  • 一、LambdaLR
  • 二、StepLR
  • 三、MultiStepLR
  • 四、ConstantLR
  • 五、LinearLR
  • 六、PolynomialLR
  • 七、ChainedScheduler
  • 八、ExponentialLR
  • 九、CosineAnnealingLR
  • 十、OneCycleLR
  • 十一、ReduceLROnPlateau
  • 十二、自定义学习率类函数
  • 总结


前言

在深度学习中,学习率对模型的训练过程起着很重要的作用,影响着损失函数的变化速度。学习率越低,可以确保不会错过任何局部最小值,但是也意味着将花费更长的训练时间来进行收敛,特别是陷入局部最优的情况下。学习率越高,就容易错过全局最小值导致结果不收敛。

一般来说,batch-size的大小一般与学习率的大小成正比。batch-size越大一般意味着算法收敛方向的置信度越大,也可以选择较大的学习率来加快收敛速度。而小的batch-size规律性较差,需要小的学习率保证不出错。在显存允许的情况下,选择大的batch-size。

预设规则的学习率变化法:StepLR、Multi-StepLR、ConstantLR、LinearLR、PolynomialLR、ChainedScheduler
自适应的学习率变化法:ExponentialLR、CosineAnnealingLR、LambdaLR、OneCycleLR、ReduceLROnPlateau

一、LambdaLR

LambdaLR的优点是可以根据自定义的函数来调整学习率,灵活性比较高。可以根据具体任务和模型的需求来选择合适的函数,以提高模型的性能。

Tips:比较适合do some research

torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1, verbose='deprecated')

基于一个lambda function来set the changes of lr
example:

lambda1 = lambda epoch : epoch/10  #For each epoch, multiply epoch/10 * initial_lr
lr_scheduler = lr_scheduler.LambdaLR(optimizer,lambda1)

lr:
0.01
0.02
0.03
...

二、StepLR

StepLR可以在训练过程中根据设定的步长来调整学习率,模型收敛的更稳定。但固定represent 不够灵活,无法适应不同的训练情况。此外,如果步长设置得不合理,可能会导致模型在训练过程中出现震荡或过拟合的情况

Tips:目前很少用这种方式了,简单测试还可以

torch.optim.StepLR(optimizer,step_size=30,gamma=0.1)

>>> # Assuming optimizer uses lr = 0.05 for all groups
>>> # lr = 0.05     if epoch < 30
>>> # lr = 0.005    if 30 <= epoch < 60
>>> # lr = 0.0005   if 60 <= epoch < 90

请添加图片描述

三、MultiStepLR

MultiStepLR学习率调整策略比StepLR略灵活一些,可以根据设定的milestones(which epoch开始decay)来调整学习率,从而更好地适应不同的训练情况。同样,如果设置不合理,可能会导致模型在训练过程中出现震荡或过拟合的情况。

Tips:对于一些不复杂的模型或者较为简单的任务,MSLR还是挺常用的,个人觉得这种方式对于要求不是特别精细的任务,收敛还是挺快的

>>> scheduler = MultiStepLR(optimizer, milestones=[30,80,100], gamma=0.1)
>>> # Assuming optimizer uses lr = 0.05 for all groups
>>> # lr = 0.05     if epoch < 30
>>> # lr = 0.005    if 30 <= epoch < 80
>>> # lr = 0.0005   if epoch >= 80

请添加图片描述

四、ConstantLR

看名字就知道是constant lr, 通过设置让某一段train process以一个固定值进行训练

Tips:个人觉得比较适合用来以固定lr进行微调

>>> # Assuming optimizer uses lr = 0.05 for all groups
>>> # lr = 0.025   if epoch == 0
>>> # lr = 0.025   if epoch == 1
>>> # lr = 0.025   if epoch == 2
>>> # lr = 0.025   if epoch == 3
>>> # lr = 0.05    if epoch >= 4
>>> scheduler = ConstantLR(optimizer, factor=0.5, total_iters=4)

五、LinearLR

LinearLR就是LR进行线性变化

Tips:简单模型测试可以用,蛮简单的策略

'''
设置end_factor < start_factor,学习率会以线性变化不断减小,反之则线性增加
start_lr = lr * start_factor,
end_lr = lr * end_factor
'''
>>> # Assuming optimizer uses lr = 0.05 for all groups
>>> # lr = 0.025    if epoch == 0
>>> # lr = 0.03125  if epoch == 1
>>> # lr = 0.0375   if epoch == 2
>>> # lr = 0.04375  if epoch == 3
>>> # lr = 0.05    if epoch >= 4
>>> scheduler = LinearLR(optimizer, start_factor=0.5, end_factor=1.0 ,total_iters=4)

六、PolynomialLR

Poly lr简单来说就是lr逐渐衰减到0的一个策略,每个epoch lr都会衰退,直到降至0。
Tips:该方式感觉很少见到,也不是很常用,具体收敛效果不是很了解

>>> # Assuming optimizer uses lr = 0.001 for all groups
>>> # lr = 0.001     if epoch == 0
>>> # lr = 0.00075   if epoch == 1
>>> # lr = 0.00050   if epoch == 2
>>> # lr = 0.00025   if epoch == 3
>>> # lr = 0.0       if epoch >= 4
>>> scheduler = PolynomialLR(optimizer, total_iters=4, power=1.0)

七、ChainedScheduler

该方式和自定义lr差不多,只不过先把每个epoch的lr变成一个list,按照该list 进行train

Tips:emm,可能有时候会用到

torch.optim.lr_scheduler.ChainedScheduler(schedulers)

八、ExponentialLR

指数衰减策略以使学习率在训练过程中逐渐减小,从而使模型更加稳定。此外,指数衰减策略的衰减因子需要根据具体情况进行调整。

Tips:指数lr在以前比较常用,感觉现在很少见到了,不过依然是一个比较好的方案

"""
new_lr = initial_lr * (gamam ** epoch)
"""
torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95, last_epoch=-1, verbose='deprecated')

请添加图片描述

九、CosineAnnealingLR

余弦退火策略的优点是可以使学习率在训练过程中逐渐减小,从而使模型更加稳定。与指数衰减策略相比,余弦退火策略的衰减速度更加缓慢,可以避免梯度爆炸的情况。此外,余弦退火策略可以根据当前epoch的索引和最大迭代次数计算出一个余弦因子,从而更好地适应不同的训练情况

Tips:余弦退火应该是现在最常用的学习率策略之一了,其原理不复杂,参数设置简单且有效

"""
new_lr = lr = 0.5 * base_lr * (1 + cos(epoch / T_max * pi))
Tmax:极速下降到0的epoch
其中,lr表示当前的学习率,base_lr表示初始学习率,epoch表示当前的epoch数,T_max表示总的epoch数,pi表示圆周率。这个公式会根据当前的epoch数和总的epoch数来计算当前的学习率,学习率会在前半段逐渐增加,在后半段逐渐减小,最终回到初始学习率。这种学习率调整策略可以帮助模型在训练初期快速收敛,在训练后期避免过拟合。
"""
scheduler = lr_scheduler.CosineAnnealingLR(optimizer,T_max=150)

请添加图片描述
请添加图片描述

十、OneCycleLR

OneCycleLR可以在训练初期快速提高学习率,加速模型的收敛速度。训练后期逐渐降低学习率,避免过拟合,提高模型的泛化能力
同时OneCycleLR学习率调整策略可以通过动态调整学习率来避免训练过程中出现梯度爆炸或梯度消失等问题,提高训练的稳定性
OneCycleLR学习率调整策略可以通过调整超参数来适应不同的数据集和模型,提高模型的性能。但需要进行仔细的调参。

Tips:OneCycleLR也是目前很常用的策略之一,对于从0训练的模型效果很好,但是不建议使用该训练策略在已训练好的模型上进一步训练

"""
    optimizer, 优化器
    max_lr, 学习率最大值
    total_steps=None, 总step次数
    pct_start=0.3, 学习率上升的部分step数量的占比
    div_factor=25.0, 初始学习率 = max_lr / div_factor
    final_div_factor=10000.0, 最终学习率 = 初始学习率 / final_div_factor
"""

scheduler = torch.optim.OneCycleLR(optimizer, max_lr=0.8, total_steps=150, pct_start=0.3)

请添加图片描述

十一、ReduceLROnPlateau

在发现loss不再降低或者acc不再提高之后,降低学习率

Tips:ReduceLR个人觉得不是特别常用,主要其超参的设置较为复杂,如果设置的好,效果还是很棒的

'''
mode:'min’模式检测metric是否不再减小,'max’模式检测metric是否不再增大;
factor: 触发条件后lr*=factor;
patience:不再减小(或增大)的累计次数;
verbose:触发条件后print;
threshold:只关注超过阈值的显著变化;
threshold_mode:有rel和abs两种阈值计算模式,rel规则:max模式下如果超过best(1+threshold)为显著,min模式下如果低于best(1-threshold)为显著;abs规则:max模式下如果超过best+threshold为显著,min模式下如果低于best-threshold为显著;
cooldown:触发一次条件后,等待一定epoch再进行检测,避免lr下降过速;
min_lr:最小的允许lr;
eps:如果新旧lr之间的差异小与1e-8,则忽略此次更新。
'''

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)

请添加图片描述

十二、自定义学习率类函数

学习率调整策略需要继承_LRScheduler类,如下

class WarmupLR(_LRScheduler):
    def __init__(self, optimizer, warmup_epochs, warmup_lr, last_epoch=-1):
        self.warmup_epochs = warmup_epochs
        self.warmup_lr = warmup_lr
        super(WarmupLR, self).__init__(optimizer, last_epoch)

    def get_lr(self):
        if self.last_epoch < self.warmup_epochs:
            return [self.warmup_lr + (base_lr - self.warmup_lr) * self.last_epoch / self.warmup_epochs
                    for base_lr in self.base_lrs]
        else:
            return [base_lr * self.gamma ** (self.last_epoch - self.warmup_epochs)
                    for base_lr in self.base_lrs]


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

数据分析工具|数据分析利器与业务决策的好帮手vividiem Desktop

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注…

如何修复d3dcompiler43.dll丢失问题,这三种方法可轻松解决

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“计算机缺失d3dcompiler43.dll”。这个问题可能会影响到计算机的正常运行&#xff0c;让我们无法正常使用某些软件或者游戏。那么&#xff0c;究竟什么是d3dcompiler43.dll&#xff1f;为什…

nginx: [error] invalid PID number ““ in “/run/nginx.pid“

两种问题&#xff0c;我自己碰到的情况 ./nginx -s reload执行命令后报错 nginx: [error] invalid PID number ““ in “/run/nginx.pid“ 第一种情况&#xff0c;pid被注释了 /usr/local/nginx/conf/nginx.conf #user nobody; worker_processes 1;// 可能是这里被注释了…

小海外仓也能用得起的大型海外仓系统:高性价比模式是关键

高效的仓储管理、订单处理效率、标准化财务管理&#xff0c;这些集成在海外仓系统的功能&#xff0c;在以往都是大型海外仓才投资得起的工具。 不过实际情况是&#xff0c;这些标准化的管理模式&#xff0c;恰恰是资金有限的小型海外仓最需要的。为了解决这个问题&#xff0c;…

基于JSP技术的社区生活超市管理系统

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;MyEclipse开发环境、Tomcat服务器 系统展示 首页 管理员功能模块…

“墨者杯”网络安全大赛wp

漏洞利用01 504错误修改为POST提交拿到php源码&#xff0c; 查看逻辑$_POST[roam1] ! $_POST[roam2] && sha1($_POST[roam1]) sha1($_POST[roam2]) 采用数组绕过 roam1[]1&roam2[]2 拿到phpinfo&#xff0c;观察发现 这里的意思是每个php页面都包含这个f14…

微信小程序实现图片预览功能

需求&#xff1a;点击图片实现放大预览 实现&#xff1a;调用微信官方给出的方法 wx.previewImage 注&#xff1a;urls 必须是数组 <image src"{{imgUrl}}" data-src"{{imgUrl}}" bindtap"previewImage" />data: {imgUrl:https://img.yz…

如何永久擦除Android手机中的所有个人数据?

在这个数字化的时代&#xff0c;确保您的个人数据的安全和隐私至关重要。如果您计划出售或回收您的Android手机&#xff0c;了解如何正确擦除Android手机是至关重要的。本综合指南将引导您通过安全擦除Android手机的分步过程&#xff0c;以保护您的敏感信息。 手机是极其敏感的…

怎么将图片里不需要的地方裁减掉?四种超好用的裁剪图片方法!

怎么将图片里不需要的地方裁减掉&#xff1f;在这个数字化时代&#xff0c;我们所处的世界变得更加多姿多彩&#xff0c;各种类型的图片不断涌现&#xff0c;从社交媒体上的自拍照到专业摄影师的作品&#xff0c;图片已经成为我们日常生活中不可或缺的一部分&#xff0c;然而&a…

Golang发送邮件如何验证身份?有哪些限制?

Golang发送邮件需要哪些库&#xff1f;怎么设置邮件发送的参数&#xff1f; 对于开发者而言&#xff0c;使用Golang发送邮件是一种常见需求。然而&#xff0c;在发送邮件的过程中&#xff0c;验证身份是一个至关重要的环节&#xff0c;它确保了邮件的可靠性和安全性。A将探讨G…

正则表达式运用

已经写了表达式&#xff0c;下一步就是匹配字符串得到结果 使用matcher的源码&#xff08;匹配&#xff09;普通方法&#xff0c;find&#xff08;寻找&#xff09;合适的代码&#xff0c;看字符串是否匹配成功 是否可以匹配上 匹配么&#xff0c;匹配就留下&#xff0c;fin…

WTLRC262-SG1模组LoRa与Wi-Fi技术助力智能化,启明云端乐鑫代理商

在物联网高速发展的今天&#xff0c;Wi-Fi 和LoRa作为近距离和远距离通信技术&#xff0c;均有其各自的典型应用场景&#xff0c;在各自应用领域都取得了卓越的成就。 Wi-Fi和LoRa技术各具优势&#xff0c;在很多场景需求中&#xff0c;如果将两者结合&#xff0c;一方面可以发…

六月可以闭眼入的宠物空气净化器:希喂、安德迈、霍尼韦尔真实PK

俗话说得好&#xff0c;猫咪一年到头都在掉毛&#xff0c;仿佛它们是四季常在的"蒲公英"&#xff0c;随时随地都在播撒毛发。猫毛不仅遍布它们自己的身体&#xff0c;还可能飘到你的床铺、沙发、衣物上……面对这样的状况&#xff0c;既要应对无处不在的猫毛&#xf…

【打印功能】js简单实现表格样式的数据打印,按样式打印出来

效果图 代码部分&#xff0c;简单三步 1&#xff0c;html部分&#xff1a;写一个表格&#xff0c;然后数据填进去 <div id"printable-area" v-show"false"><div><div style"text-align: center;height: 40px;line-height: 40px;font…

XENDOLL小型激光雕刻机能让你的产品更多选择

小型雕刻机是一种在小型尺寸范围内进行精细雕刻和切割的机械设备。它广泛应用于各种材料上的图案、文字、标识等雕刻工作&#xff0c;特别是在教学、工艺品制作、广告制作、模型制作等领域中发挥着重要作用。 激光雕刻机凭借其高精度、高效率和非接触式的加工特性&#xff0c;能…

electron自定义顶部

我的项目是采用的electron-vite搭建的,希望下面的内容可以给你带来帮助 自定义菜单栏Vue <template><div class"title-bar"><div class"left-section"><img src"../assets/icon.png" alt"Icon" class"icon…

电流继电器JL-31 柜内固定安装 约瑟JOSEF

JL系列电流继电器型号&#xff1a; 电流继电器JL-31 电流继电器JL-31C/1 电流继电器JL-31A 电流继电器JL-31/B 电流继电器JL-32BP 电流继电器JL-22 电流继电器JL-21 电流继电器JL-21B 电流继电器JL-23 电流继电器JL-11 电流继电器JL-11/2G 电流继电器JL-11C 电流继电器J…

RK3288 android7.1 实现ota升级时清除用户数据

一&#xff0c;OTA简介(整包&#xff0c;差分包) OTA全称为Over-The-Air technology(空中下载技术)&#xff0c;通过移动通信的接口实现对软件进行远程管理。 1. 用途&#xff1a; OTA两种类型最大的区别莫过于他们的”出发点“&#xff08;我们对两种不同升级包的创建&…

C#——枚举类型详情

枚举类型 枚举类型&#xff08;也可以称为“枚举器”&#xff09;由一组具有独立标识符&#xff08;名称&#xff09;的整数类型常量构成&#xff0c;在 C# 中枚举类型不仅可以在类或结构体的内部声明&#xff0c;也可以在类或结构体的外部声明&#xff0c;默认情况下枚举类型…

进程和计划任务以及步骤

进程 进程和程序有关&#xff0c;把该文件放到内存里&#xff0c;进程是动态的&#xff0c;不同时刻的状态不一样 内存&#xff1a;放置正在运行的程序和所需数据的位置 程序启动 ——》将相关文件和数据放到内存里 ——》进程&#xff08;processes&#xff09; 进程相关命令 …