推荐答案
在 PyTorch 中,torch.optim.lr_scheduler
模块提供了多种学习率调度器,常用的调度器包括:
StepLR
: 每隔固定的步数(epoch)将学习率乘以一个因子。MultiStepLR
: 在指定的 epoch 时将学习率乘以一个因子。ExponentialLR
: 每个 epoch 将学习率按指数衰减。CosineAnnealingLR
: 按照余弦函数调整学习率。ReduceLROnPlateau
: 当某个指标(如验证集损失)不再下降时,降低学习率。LambdaLR
: 使用自定义的 lambda 函数来调整学习率。CyclicLR
: 学习率在设定的范围内循环变化。OneCycleLR
: 实现 1cycle 学习率策略,结合了线性增加和余弦退火。
本题详细解读
StepLR
StepLR
是最简单的学习率调度器之一。它每隔固定的步数(epoch)将学习率乘以一个因子 gamma
。例如,如果 step_size=30
且 gamma=0.1
,则每 30 个 epoch 后,学习率会变为原来的 0.1 倍。
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
MultiStepLR
MultiStepLR
类似于 StepLR
,但它允许在多个指定的 epoch 时调整学习率。你可以传入一个列表 milestones
,表示在哪些 epoch 时调整学习率。
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[30, 80], gamma=0.1)
ExponentialLR
ExponentialLR
在每个 epoch 后将学习率按指数衰减。gamma
参数控制衰减的速度。
scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95)
CosineAnnealingLR
CosineAnnealingLR
按照余弦函数调整学习率。它会在每个 epoch 中根据余弦函数的变化来调整学习率,通常用于周期性调整学习率。
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)
ReduceLROnPlateau
ReduceLROnPlateau
是一种动态调整学习率的调度器。当某个指标(如验证集损失)不再下降时,它会降低学习率。factor
参数控制学习率降低的倍数。
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10)
LambdaLR
LambdaLR
允许你使用自定义的 lambda 函数来调整学习率。你可以根据 epoch 或其他条件来定义学习率的变化。
lambda1 = lambda epoch: epoch // 30 scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda1)
CyclicLR
CyclicLR
是一种循环调整学习率的调度器。它会在设定的最小和最大学习率之间循环变化,适用于需要周期性调整学习率的场景。
scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr=0.001, max_lr=0.1)
OneCycleLR
OneCycleLR
实现了 1cycle 学习率策略,结合了线性增加和余弦退火。它通常用于快速收敛的模型训练。
scheduler = torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr=0.1, total_steps=100)