网站首页

亿兆注册

智能终端处理器 智能云服务器 软件开发环境

新闻中心

关于亿兆体育

公司概况 核心优势 核心团队 发展历程

亿兆登录

官方微信 官方微博
主页 > 新闻中心

pytorch 优化器调参以及正确用法

发布时间:2024-04-15 12:59浏览次数: 来源于:网络

optimzier优化器的作用:优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值的作用。

从优化器的作用出发,要使得优化器能够起作用,需要主要两个东西:

  1. 优化器需要知道当前的网络或者别的什么模型的参数空间,这也就是为什么在训练文件中,正式开始训练之前需要将网络的参数放到优化器里面。
  2. 参数


那么优化器如何进行更新呢?

我们来看一下.step源码


从上面的代码可以看到step这个函数使用的是参数空间(param_groups)中的grad,也就是当前参数空间对应的梯度,这也就解释了为什么optimzier使用之前需要zero清零一下,因为如果不清零,那么使用的这个grad就得同上一个mini-batch有关,这不是我们需要的结果。再回过头来看,我们知道optimizer更新参数空间需要基于反向梯度,因此,当调用optimizer.step()的时候应当是loss.backward()的时候。


那么为什么optimizer.step()需要放在每一个batch训练中,而不是epoch训练中,这是因为现在的mini-batch训练模式是假定每一个训练集就只有mini-batch这样大,因此实际上可以将每一次mini-batch看做是一次训练,一次训练更新一次参数空间,因而optimizer.step()放在这里。

scheduler.step()按照Pytorch的定义是用来更新优化器的学习率的,一般是按照epoch为单位进行更换,即多少个epoch后更换一次学习率,因而scheduler.step()放在epoch这个大循环下。


PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现。PyTorch提供的学习率调整策略分为三大类,分别是

  • 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing。

  • 自适应调整:自适应调整学习率 ReduceLROnPlateau。

  • 自定义调整:自定义调整学习率 LambdaLR。

  1. 等间隔调整学习率 StepLR

    等间隔调整学习率,调整倍数为 gamma 倍,调整间隔为 step_size。间隔单位是step。需要注意的是, step 通常是指 epoch,不要弄成 iteration 了。


  1. 按需调整学习率 MultiStepLR

按设定的间隔调整学习率。这个方法适合后期调试使用,观察 loss 曲线,为每个实验定制学习率调整时机。


  1. 指数衰减调整学习率 ExponentialLR

按指数衰减调整学习率,调整公式: lr=l?gammaepoch


  1. 余弦退火调整学习率 CosineAnnealingLR

以余弦函数为周期,并在每个周期最大值时重新设置学习率。以初始学习率为最大学习率,以 2?Tmax
2?Tmax 为周期,在一个周期内先下降,后上升。


  1. 自适应调整学习率 ReduceLROnPlateau

当某指标不再变化(下降或升高),调整学习率,这是非常实用的学习率调整策略。
例如,当验证集的 loss 不再下降时,进行学习率调整;或者监测验证集的 accuracy,当accuracy 不再上升时,则调整学习率。


  1. 自定义调整学习率 LambdaLR

为不同参数组设定不同学习率调整策略。调整规则为,

lr=base_lr?lmbda(self.last_epoch)
lr=base_lr?lmbda(self.last_epoch)

fine-tune 中十分有用,我们不仅可为不同的层设定不同的学习率,还可以为其设定不同的学习率调整策略。



?


参考:

  1. https://blog.csdn.net/shanglianlm/article/details/85143614

    1. https://blog.csdn.net/xiaoxifei/article/details/87797935

下一篇:《以思想破冰引领优化营商环境》大讨论有奖征文选登:提升服务供给 优化营商环境
上一篇:抖音为什么要做“心动外卖”?

咨询我们

输入您的疑问及需求发送邮箱给我们

平台注册入口