赞
踩
此篇博客最全面地展现了pytorch各种学习率调整策略的参数、用法以及对应的示例曲线,学习率调整的策略主要分为四大类:指定方法调整(MultiStepLR、LinearLR、CosineAnnealingLR、OneCycleLR等)、组合调整(SequentialLR和ChainedScheduler)、自定义调整(LambdaLR和MultiplicativeLR)、自适应调整(ReduceLROnPlateau)。
所有示例的参数配置:初始的学习率均为1,epoch从0开始,直到第200次结束。
LambdaLR 提供了更加灵活的方式让使用者自定义衰减函数,完成特定的学习率曲线。LambdaLR通过将lambda函数的乘法因子应用到初始LR来调整学习速率。
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=- 1, verbose=False)
参数:
示例:
lambda1 = lambda epoch: np.cos(epoch/max_epoch*np.pi/2)
scheduler = LambdaLR(optimizer, lr_lambda=[lambda1])
MultiplicativeLR同样可以自定义学习率的变化,与LambdaLR不同的是MultiplicativeLR通过将lambda函数的乘法因子应用到前一个epoch的LR来调整学习速率。
torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=- 1, verbose=False)
参数:
示例:
lmbda = lambda epoch: 0.95
scheduler = MultiplicativeLR(optimizer, lr_lambda=lmbda)
每到达一定周期(step_size),学习率乘以一个系数 gamma。
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=- 1, verbose=False)
参数:
示例:scheduler = StepLR(optimizer, step_size=30, gamma=0.5)
StepLR 的 Step 是固定的,MultiStepLR 则可以设置每一个 step 的大小。
torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=- 1, verbose=False)
参数:
optimizer (Optimizer) – 优化器
milestones (list) – epoch索引列表,必须增加
gamma (float) – 学习率衰减的乘法因子,默认值:0.1
last_epoch (int) – 最后一个epoch的索引,默认值:-1
verbose (bool) – 如果是True,则每次更新学习率会将消息打印到 stdout,默认值:False
示例:MultiStepLR(optimizer, milestones=[30,80,150], gamma=0.5)
在total_iters轮内将optimizer里面指定的学习率乘以factor,total_iters轮外恢复原学习率。
torch.optim.lr_scheduler.ConstantLR(optimizer, factor=0.3333333333333333, total_iters=5, last_epoch=- 1, verbose=False)
参数:
示例:scheduler = ConstantLR(optimizer, factor=0.5, total_iters=50)
线性改变每个参数组的学习率,直到 epoch 达到预定义的值(total_iters)。
torch.optim.lr_scheduler.LinearLR(optimizer, start_factor=0.3333333333333333, end_factor=1.0, total_iters=5, last_epoch=- 1, verbose=False)
参数:
示例: scheduler = LinearLR(optimizer, start_factor=1, end_factor=1/2, total_iters=200)
每个时期将每个参数组的学习率衰减 gamma。
torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=- 1, verbose=False)
参数:
示例:scheduler = ExponentialLR(optimizer, gamma=0.9)
多项式函数衰减学习率。
torch.optim.lr_scheduler.PolynomialLR(optimizer, total_iters=5, power=1.0, last_epoch=- 1, verbose=False)
参数:
示例:
scheduler = PolynomialLR(optimizer, total_iters=100, power=2)
余弦学习率衰减方法相对于线性学习率衰减方法来说,可以更快地达到最佳效果,更好地保持模型的稳定性,同时也可以改善模型的泛化性能。余弦学习率衰减前期衰减慢,中期衰减快,后期衰减慢,和模型的学习有相似之处。
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=- 1, verbose=False)
参数:
示例:scheduler = CosineAnnealingLR(optimizer, T_max=200, eta_min=0.5)
可以将多种衰减方式以串联的方式进行组合。
torch.optim.lr_scheduler.SequentialLR(optimizer, schedulers, milestones, last_epoch=- 1, verbose=False)
参数:
示例:
scheduler1 = LinearLR(optimizer, start_factor=1, end_factor=1/2, total_iters=100)
scheduler2 = CosineAnnealingLR(optimizer, T_max=100, eta_min=0.5)
schedulers = [scheduler1, scheduler2]
milestones = [100]
scheduler = SequentialLR(optimizer, schedulers, milestones)
ChainedScheduler和SequentialLR类似,也是按照顺序调用多个串联起来的学习率调整策略,不同的是ChainedScheduler里面的学习率变化是连续的。
torch.optim.lr_scheduler.ChainedScheduler(schedulers)
参数:
schedulers (list) – 学习率调整策略(scheduler)的列表
示例:
scheduler1 = ConstantLR(optimizer, factor=0.1, total_iters=10)
scheduler2 = ExponentialLR(optimizer, gamma=0.9)
scheduler = ChainedScheduler([scheduler1,scheduler2])
CyclicLR循环地调整学习率。
torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=- 1, verbose=False)
参数:
示例
scheduler = CyclicLR(optimizer, base_lr=0.1, max_lr=1, step_size_up=50)
OneCycleLR是CyclicLR的一周期版本。
torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr, total_steps=None, epochs=None, steps_per_epoch=None, pct_start=0.3, anneal_strategy='cos', cycle_momentum=True, base_momentum=0.85, max_momentum=0.95, div_factor=25.0, final_div_factor=10000.0, three_phase=False, last_epoch=- 1, verbose=False)
参数:
示例:
scheduler = OneCycleLR(optimizer, max_lr=1, steps_per_epoch=10, epochs=20)
CosineAnnealingWarmRestartsLR类似于CosineAnnealingLR,但它可以循环从初始LR重新开始LR的衰减。
torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, eta_min=0, last_epoch=- 1, verbose=False)
参数:
示例:
scheduler = CosineAnnealingWarmRestarts(optimizer, T_0=30, T_mult=2)
当指度量指标(例如:loss、precision等)停止改进时,ReduceLROnPlateau会降低学习率。其功能是自适应调节学习率,它在step的时候会观察验证集上的loss或者准确率情况,loss当然是越低越好,准确率则是越高越好,所以使用loss作为step的参数时,mode为min,使用准确率作为参数时,mode为max。
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08, verbose=False)
参数:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。