尊龙凯时外语学习交流中心

导航切换

联系电话:
020-88888888     13988889999

尊龙凯时外语学习交流中心

尊龙凯时外语学习交流中心

利用scheduler实现learning-rate学习率动态变化

作者: 佚名 浏览:   日期:2024-06-10

记录一下schedule设置学习率变化过程的使用和方法

pytorch提供数种优化器的实现,优化器根据计算图的结构,进行梯度计算,根据loss信息实现自动的BP过程。常用的就是,将网络参数传入,设置初始的学习率即可:

 

在训练中:

 

即可实现BP环节。

提供了随着训练的迭代次数对optimizer的学习率进行修改的类和方法,通过在循环过程中调用:

 

每次调用step方法,类中内置的计数器就会+1,即轮次数增加。根据不同的当前,scheduler类会对optimizer中的learning-rate进行修改。利用可查看当前的学习率大小。

这边整理三个常用的类:LambdaLRStepLRMultiStepLR。个人觉得这三种就能应对大部分的调整需求了。

LambdaLR

完整的类包为。该类实现的学习率变化策略为当前学习率乘以值,的大小由一个自定函数确定,该函数输入为epoch,即类中的循环次数计数(也就是调用的次数)。

learing-rate = λ * learing-rate

 

其中为λ的计算函数。
给个使用例子:

 

计算函数:

 

在循环中使用:

 

输出:

 

当scheduler调用step之后,就能修改对应的optimizer的lr参数,从而改变整体训练的学习率。

StepLR

完整的类包为。该类的学习策略为设定某个间隔,在经过间隔次数的循环之后,就将学习率乘以γ得到新的学习率。

learning_rate = learning_rate * (γ ^ (epoch//step_size))

 

给个使用例子:

 

输出:

 

设定间隔和γ值即可。

MultiStepLR

完整的类包为。这个类更新策略和step差不多,但其不一定为等间隔更新,有里程碑参数,用来传入更新的轮次list,每次迭代次数到达中的某值,即进行学习率的更新。

 

需要顺序排列。

给个使用例子:

 

输出:

 

last_epoch

scheduler初始化的时候都有个的参数,当训练中止保存后,重开的时候就会调用作为当前epoch,以继续训练,默认为-1从头开始。

参考文档

lr_scheduler文档:https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html

平台注册入口