pytorch中Schedule与warmup_steps怎么用
这篇文章主要介绍了pytorch中Schedule与warmup_steps怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
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是当前迭代次数。
deflr_lambda(self,step):#线性变换,返回的是某个数值x,然后返回到类LambdaLR中,最终返回old_lr*xifstep<self.warmup_steps:#增大学习率returnfloat(step)/float(max(1,self.warmup_steps))#减小学习率returnmax(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指的是经过这么多次迭代,学习率改变一次。
感谢你能够认真阅读完这篇文章,希望小编分享的“pytorch中Schedule与warmup_steps怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。