Pytorch包含的学习率调整策略

Pytorch的学习率调整策略通过torch.optim.lr_scheduler实现。

1. 等间隔调整学习率StepLR

等间隔调整学习率,通过设定调整间隔和倍率,阶段调整学习率

torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)

参数:

optimizer:优化器

step_size (int) : 学习率的调整间隔,如设为50,学习率就会在50、100、150个epoch时调整学习率

gamme (float) :学习率的调整倍率,默认为0.1倍,即到达调整间隔时,学习率会变为原来的0.1倍

last_epoch (int) : 上一次训练到多少个epoch,如设定为20,调整间隔为30,则会在本次训练的第10个epoch调整学习率,不使用可设为-1

 

2. 设定间隔调整学习率MultiStepLR

按照设定的间隔调整学习率,[50, 100, 150]

torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

参数:

optimizer:优化器

milestones (list) : 学习率的调整间隔,[50, 100, 150] list

gamme (float) :学习率的调整倍率,默认为0.1倍,即到达调整间隔时,学习率会变为原来的0.1倍

last_epoch (int) : 上一次训练到多少个epoch,如设定为20,调整间隔为30,则会在本次训练的第10个epoch调整学习率,不使用可设为-1   int

 

3. 指数衰减调整学习率ExponentialLR

按照指数衰减调整学习率,调整公式 lr = lr * gamma ** epoch

torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.1, last_epoch=-1) 

参数:

optimizer:优化器

gamme (float) :  学习率调整的底数 

last_epoch (int) : 上一次训练到多少个epoch,如设定为20,调整间隔为30,则会在本次训练的第10个epoch调整学习率,不使用可设为-1   int

 

4. 余弦退火调整学习率CosineAnnealingLR

以余弦函数为周期,在每个周期最大值时重新设置学习率。以初始学习率为最大学习率,以2*Tmax为周期,在一个周期内先下降后上升

torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1) 

参数:

optimizer:优化器

T_max:  一次学习率周期的迭代次数,即T_max个epoch之后重新设置学习率

eta_min (float) :  最小学习率,即在一个周期内,学习率最小会下降到eta_min,默认为值为0

last_epoch (int) : 上一次训练到多少个epoch,如设定为20,调整间隔为30,则会在本次训练的第10个epoch调整学习率,不使用可设为-1

 

5. 自适应调整学习率ReduceLROnPlateau

 当某个指标不再变化(下降或升高)时,调整学习率,非常实用的调整学习率策略

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)

参数:

optimizer:优化器

mode: 模式选择,有 min 和 max两种模式,min表示选定指标不再降低,max表示选定指标不再升高

factor (float) : 学习率的调整倍率,等同于其他调整方式中的gamma

patience (int) : 忍受选定的指标多少个epoch不再上升或下降,达到上限时,调整学习率

verbose (bool) : 是否打印学习率信息,print(‘Epoch {:5d}: reducing learning rate of group {} to {:.4e}.’.format(epoch, i, new_lr))

threshold_mode:选择判断指标是否达到最优的模式,有两种模式,rel和abs

  当threshold_mode == rel、mode == max时,dynamic_threshold = best * (1 + threshold)

  当threshold_mode == rel、mode == min时,dynamic_threshold = best * (1 - threshold)

  当threshold_mode == abs、mode == max时,dynamic_threshold = best + threshold

  当threshold_mode == abs、mode == min时,dynamic_threshold = best - threshold

threshold (float) : 配合threshold_mode使用

cooldown: 冷却时间,当调整学习率后,让学习率调整策略冷静一下,让模型再训练一段时间,再重启监测模式

min_lr (float) : 学习率的下限,可为float,也可为list,当有多个参数组时,可用list进行设置

eps (float) :学习率衰减的最小值,当学习率变化小于eps时,则不再调整学习率

 

6. 自定义调整学习率LambdaLR

为不同的参数组设定不同学习率调整策略,一般fine-tune时使用,可以为不同的层设定不同的学习率,也可以为其设定不同的学习率调整策略

torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, lr_lambda, last_epoch=-1)

参数:

optimizer:优化器

lr_lambda (function or list) : 一个计算学习率调整倍率的函数,输入通常为step,当有多个参数组时,设为list

last_epoch (int) : 上一次训练到多少个epoch,如设定为20,调整间隔为30,则会在本次训练的第10个epoch调整学习率,不使用可设为-1

 

posted @ 2022-01-20 11:02  Liang-ml  阅读(235)  评论(0编辑  收藏  举报