学习率

学习率(Learning Rate)作为网络中重要的一个超参数,其设置的好坏决定了目标函数能否收敛到局部最小值以及何时收敛到最小值。

在Deeplab中提出的Poly学习率策略。

# 创建学习率更新策略,这里是每个step更新一次学习率,以及使用warmup
def create_lr_scheduler(optimizer,num_step: int,epochs: int,warmup=True,warmup_epochs=1,warmup_factor=1e-3):assert num_step > 0 and epochs > 0if warmup is False:warmup_epochs = 0def f(x):"""根据step数返回一个学习率倍率因子,注意在训练开始之前,pytorch会提前调用一次lr_scheduler.step()方法"""if warmup is True and x <= (warmup_epochs * num_step):alpha = float(x) / (warmup_epochs * num_step)# warmup过程中lr倍率因子从warmup_factor -> 1return warmup_factor * (1 - alpha) + alphaelse:# 参考deeplab_v2: Learning rate policyreturn (1 - (x - warmup_epochs * num_step) / ((epochs - warmup_epochs) * num_step)) ** 0.9return torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=f)

学习率的计算:
由于网络在训练开始之前,pytorch会提前调用一次lr_scheduler.step()方法,因此从x=1开始计算,在预热阶段,学习率每次会根据warmup_factor * (1 - alpha) + alpha返回一个学习率倍率因子。调用lr_scheduler.py文件里的LambdaLR类,使用函数get_lr将倍率因子与初始学习率相乘,得到当前的学习率。


学习率通过上述计算方式,得到网络当前的学习率(保存小数点后6位):
x = 1, warmup_epochs=1, num_step=366, init_base=1e-4 warmup_factor=1e-3 :
alpha = float(x) / (warmup_epochs * num_step) = 1 / (1 * 366) = 0.0027
warmup_factor * (1 - alpha) + alpha = 0.0036973
0.0036973* init_base = 0.000000

x = 2:
alpha = float(x) / (warmup_epochs * num_step) = 2 / (1 * 366) = 0.01
warmup_factor * (1 - alpha) + alpha = 0.01099
0.01099 * init_base = 1e-6
.
.
.

网络训练时使用不同学习率策略(Poly)以及学习率是如何计算相关推荐

  1. 【深度学习】网络训练时train/val loss出现周期性剧增原因

    今天在训练自己定义的网络时,用Tensorboard观察Train/Val 的loss在训练时的变化,发现了下面loss会周期性剧增的情况: 通过观察loss具体的数值变化,我发现每次loss剧增都发 ...

  2. 网络训练时出现loss为nan的情况(已解决)

    最近在使用SSD网络跑自己的数据集时,训练刚开始就出现loss=nan值的情况,经过多方查找资料,发现训练过程中loss出现nan值时,一般是下列问题导致的: 数据集的问题,可能存在数据本身就存在na ...

  3. MindSpore:Ascend芯片Mindspore代码实现小样本图像分类,在网络训练时出现错误

    问题描述: Mindspore环境:v1.0.1,Ascend 问题背景:小样本图像分类,需要自定义数据集,采用了GeneratorDataset:自定义采样器Sampler:仿照教程自定义了With ...

  4. 【模型训练】如何选择最适合你的学习率变更策略

    文章首发于微信公众号<有三AI> [模型训练]如何选择最适合你的学习率变更策略 如果让我投票给深度学习中,最不想调试,但又必须要小心调试的参数,毫无疑问会投给学习率,今天就来说说这个. 0 ...

  5. 模型训练技巧:warmup学习率策略

    1.什么是warmup 学习率的设置 - 不同阶段不同值:上升 -> 平稳 -> 下降 由于神经网络在刚开始训练的时候是非常不稳定的,因此刚开始的学习率应当设置得很低很低,这样可以保证网络 ...

  6. 网络服务器未运行是什么原因是,Win7使用网络诊断时提示“诊断策略服务未运行”如何处理?...

    在Win7系统中,通常遇到网络故障时,我们都会使用网络诊断来检查问题所在.但有时使用网络诊断时会出现"诊断策略服务未运行"的提示,从而导致网络的诊断失败.那么这要怎么处理呢?下面, ...

  7. 网络训练 (总结5)

    网络训练 1.1 网络运算的基本过程 神经网络的参数更新方法是基于一阶导数的梯度下降方法,网络的运算包含两个交替进行的步骤:数据的前向运算和误差的反向传播.在前向运算中,输入数据经过网络逐层变换,形成 ...

  8. 【学习率】梯度下降学习率的设定策略

    转载 卢明冬 参考 学习率和batchsize如何影响模型的性能? - yumoye - 博客园 学会使用顶级算法的秘诀是什么?如何找到合适的学习率?-电子发烧友网 深度学习论文 - Cyclical ...

  9. 深度学习网络训练技巧

    (改了点) 转载请注明:炼丹实验室 新开了一个专栏,为什么叫炼丹实验室呢,因为以后会在这个专栏里分享一些关于深度学习相关的实战心得,而深度学习很多人称它为玄学,犹如炼丹一般.不过即使是炼丹也是可以摸索 ...

  10. 关于 train loss、val loss训练时遇到的问题

    数据集说明 训练集是用于模型的训练的样本集合,确定模型的权重参数. 训练集的数量随着模型的复杂度要增多. 反向传播确定最优参数. 验证集用于验证模型的评估.模型的选择.参数的调整. 选择模型.调整超参 ...

最新文章

  1. [解题报告]Triangle Wave
  2. js中for-in的坑
  3. 使用Data Profile进行数据剖析
  4. 移动端分享插件使用总结
  5. memcache、Redis与MongoDB的学习-1
  6. Java加密与解密的艺术~数字签名~ECDSA实现
  7. 无需破解,Python这个神器帮你免费获取资源,赶紧收藏!
  8. 【python】-- Socket接收大数据
  9. 【linux】telnet ctrl+c 不退出问题解决
  10. 计算机思维导图药剂学,思维导图在药剂学教学中的应用
  11. 铺瓷砖问题的C++实现
  12. 《 极秀校园行Windows XP SP3装机专版 》 光盘介绍
  13. 最新版国庆头像生成器微信小程序源码
  14. 测试基础-测试用例编写
  15. createTrackbar滑条函数
  16. Django应用容器封装DockerFile分享
  17. 22考研|英语词汇该如何记忆?
  18. java 对es的操作
  19. Android微信hook
  20. 为什么Windows Mobile会失败?

热门文章

  1. 引入思考的电影电视动漫
  2. 是时候展示真正的云存储黑科技了!
  3. 电脑找回,怎么找回电脑上删除的文件_怎么找回电脑删除的文件-win7之家
  4. ubuntu 连接双显示器
  5. 美化版缤纷彩色文字广告代码文字+网站添加AD教程
  6. php实现页面强制跳转,PHP实现页面跳转的几种方法 - 米扑博客
  7. python 拆分pdf指定页_Python简单拆分PDF文件,将一个PDF文件拆分成指定份数
  8. hdu 3966 树链剖分
  9. 网络电话VOIP技术解析
  10. java微调器_Swing微调器示例