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中的cookielib模拟登录网站
Apr 09 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
python 字符串追加实例
Jul 20 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
使用Python实现批量ping操作方法
May 06 Python
Python实现打包成库供别的模块调用
Jul 13 Python
python本地文件服务器实例教程
May 02 Python
Python类方法总结讲解
Jul 26 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 curl的深入解析
2013/06/02 PHP
php中define用法实例
2015/07/30 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
node.js基础知识小结
2018/02/26 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
Python常用模块用法分析
2014/09/08 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
经理任命书模板
2014/06/06 职场文书
毕业生面试求职信
2014/06/23 职场文书
信用卡工作证明模板
2014/09/14 职场文书
平遥古城导游词
2015/02/03 职场文书
消费者理赔投诉书
2015/07/02 职场文书
爱护环境建议书
2015/09/14 职场文书
学习党史心得体会2016
2016/01/23 职场文书