自己之前写过一个Pytorch学习率更新,其中感觉依据是否loss升高或降低的次数来动态更新学习率,感觉是个挺好玩的东西,自己弄了好久都设置错误,今天算是搞出来了!
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)
在发现loss不再降低或者acc不再提高之后,降低学习率。各参数意义如下:
参数 | 含义 |
---|---|
mode | 'min'模式检测metric是否不再减小,'max'模式检测metric是否不再增大; |
factor | 触发条件后lr*=factor; |
patience | 不再减小(或增大)的累计次数; |
verbose | 触发条件后print; |
threshold | 只关注超过阈值的显著变化; |
threshold_mode | 有rel和abs两种阈值计算模式,rel规则:max模式下如果超过best(1+threshold)为显著,min模式下如果低于best(1-threshold)为显著;abs规则:max模式下如果超过best+threshold为显著,min模式下如果低于best-threshold为显著; |
cooldown | 触发一次条件后,等待一定epoch再进行检测,避免lr下降过速; |
min_lr | 最小的允许lr; |
eps | 如果新旧lr之间的差异小于1e-8,则忽略此次更新。 |
例子,如图所示的y轴为lr,x为调整的次序,初始的学习率为0.0009575
则学习率的方程为:lr = 0.0009575 * (0.35)^x
查看
版权说明
除非特别说明,本博客所有作品均采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明转自-
https://www.emperinter.info/2020/08/05/change-leaning-rate-by-reducelronplateau-in-pytorch/