pytorch weight decay_Pytorch 优化器使用和调整策略
编辑:佚名 日期:2024-08-26 05:16 / 人气:
- 优化器介绍
- pytorch中使用方法
- 学习率调整策略
- 实战代码
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 了。
2. 按需调整学习率 MultiStepLR
按设定的间隔调整学习率。这个方法适合后期调试使用,观察 loss 曲线,为每个实验定制学习率调整时机。
3. 指数衰减调整学习率 ExponentialLR
按指数衰减调整学习率,调整公式: lr=l?gammaepoch
4. 余弦退火调整学习率 CosineAnnealingLR
以余弦函数为周期,并在每个周期最大值时重新设置学习率。以初始学习率为最大学习率,以 2?Tmax
2?Tmax 为周期,在一个周期内先下降,后上升。
5. 自适应调整学习率 ReduceLROnPlateau
当某指标不再变化(下降或升高),调整学习率,这是非常实用的学习率调整策略。
例如,当验证集的 loss 不再下降时,进行学习率调整;或者监测验证集的 accuracy,当accuracy 不再上升时,则调整学习率。
6. 自定义调整学习率 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?blog.csdn.net2.
https://blog.csdn.net/xiaoxifei/article/details/87797935?blog.csdn.net内容搜索 Related Stories
推荐内容 Recommended
- 图优化学习笔记09-09
- 电竞世界:说了垃圾话,我们还是好对手09-09
- 抖音电脑版如何在电脑上下载安装?09-09
- pytorch weight decay_Pytorch 优化器使用和调整策略08-26
- 【源码+打包】【更新】抖音视频下载之指定作者批量下载 08-26