pytorch中Schedule与warmup_steps的用法说明


Posted in Python onMay 24, 2021

1. lr_scheduler相关

lr_scheduler = WarmupLinearSchedule(optimizer, warmup_steps=args.warmup_steps, t_total=num_train_optimization_steps)

其中args.warmup_steps可以认为是耐心系数

num_train_optimization_steps为模型参数的总更新次数

一般来说:

num_train_optimization_steps = int(total_train_examples / args.train_batch_size / args.gradient_accumulation_steps)

Schedule用来调节学习率,拿线性变换调整来说,下面代码中,step是当前迭代次数。

def lr_lambda(self, step):
        # 线性变换,返回的是某个数值x,然后返回到类LambdaLR中,最终返回old_lr*x
        if step < self.warmup_steps: # 增大学习率
            return float(step) / float(max(1, self.warmup_steps))
        # 减小学习率
        return max(0.0, float(self.t_total - step) / float(max(1.0, self.t_total - self.warmup_steps)))

在实际运行中,lr_scheduler.step()先将lr初始化为0. 在第一次参数更新时,此时step=1,lr由0变为初始值initial_lr;在第二次更新时,step=2,上面代码中生成某个实数alpha,新的lr=initial_lr *alpha;在第三次更新时,新的lr是在initial_lr基础上生成,即新的lr=initial_lr *alpha。

其中warmup_steps可以认为是lr调整的耐心系数。

由于有warmup_steps存在,lr先慢慢增加,超过warmup_steps时,lr再慢慢减小。

在实际中,由于训练刚开始时,训练数据计算出的grad可能与期望方向相反,所以此时采用较小的lr,随着迭代次数增加,lr线性增大,增长率为1/warmup_steps;迭代次数等于warmup_steps时,学习率为初始设定的学习率;迭代次数超过warmup_steps时,学习率逐步衰减,衰减率为1/(total-warmup_steps),再进行微调。

2. gradient_accumulation_steps相关

gradient_accumulation_steps通过累计梯度来解决本地显存不足问题。

假设原来的batch_size=6,样本总量为24,gradient_accumulation_steps=2

那么参数更新次数=24/6=4

现在,减小batch_size=6/2=3,参数更新次数不变=24/3/2=4

在梯度反传时,每gradient_accumulation_steps次进行一次梯度更新,之前照常利用loss.backward()计算梯度。

补充:pytorch学习笔记 -optimizer.step()和scheduler.step()

optimizer.step()和scheduler.step()的区别

optimizer.step()通常用在每个mini-batch之中,而scheduler.step()通常用在epoch里面,但是不绝对,可以根据具体的需求来做。只有用了optimizer.step(),模型才会更新,而scheduler.step()是对lr进行调整。

通常我们有

optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum = 0.9)
scheduler = lr_scheduler.StepLR(optimizer, step_size = 100, gamma = 0.1)
model = net.train(model, loss_function, optimizer, scheduler, num_epochs = 100)

在scheduler的step_size表示scheduler.step()每调用step_size次,对应的学习率就会按照策略调整一次。

所以如果scheduler.step()是放在mini-batch里面,那么step_size指的是经过这么多次迭代,学习率改变一次。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python操作 hbase 数据的方法
Dec 18 Python
机器学习10大经典算法详解
Dec 07 Python
Python中协程用法代码详解
Feb 10 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
python实现AES和RSA加解密的方法
Mar 28 Python
python处理大日志文件
Jul 23 Python
解决Mac下使用python的坑
Aug 13 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
Python实现动态循环输出文字功能
May 07 Python
PyTorch-GPU加速实例
Jun 23 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 #Python
pytorch交叉熵损失函数的weight参数的使用
May 24 #Python
pytorch 实现变分自动编码器的操作
May 24 #Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 #Python
Python基础之函数嵌套知识总结
May 23 #Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 #Python
Python基础之元编程知识总结
May 23 #Python
You might like
浅谈php命令行用法
2015/02/04 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
jQuery插件 tabBox实现代码
2010/02/09 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Python中extend和append的区别讲解
2019/01/24 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
优秀教师事迹简介
2014/02/02 职场文书
个人授权委托书格式
2014/08/30 职场文书
迎国庆演讲稿
2014/09/05 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
个人先进事迹材料
2014/12/29 职场文书
道歉情书大全
2015/05/12 职场文书
小学校长开学致辞
2015/07/29 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书