

在 PyTorch 中,有多种学习率调度(Learning Rate Scheduling)方法可以用来控制模型的学习率。这些方法有助于在训练过程中动态调整学习率,以便更好地控制优化过程,从而可能提高模型的性能。以下八种常见的学习率调整策略:
StepLR:按照固定的步数来调整学习率。你需要指定初始学习率和每多少步(step_size)减少一次学习率,以及降低的因子(gamma)。
from torch.optim.lr_scheduler import StepLR
scheduler = StepLR(optimizer, step_size=7, gamma=0.1)调用学习率的方式:
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)
for epoch in range(100):
train(...)
validate(...)
scheduler.step()MultiStepLR:类似于StepLR,但是步数是预定义的。你可以在创建调度器时指定一个 milestones 列表,表示在哪些 epoch 后降低学习率。
scheduler = MultiStepLR(optimizer, milestones=[10, 30], gamma=0.1)ExponentialLR:按照指数衰减的方式调整学习率。你需要指定初始学习率和每一步的衰减因子(gamma)。
scheduler = ExponentialLR(optimizer, gamma=0.9)CosineAnnealingLR:使用余弦退火策略来调整学习率。你还需要指定一个 T_max,表示完整的周期长度。
scheduler = CosineAnnealingLR(optimizer, T_max=10)LambdaLR:允许你根据自定义的lambda函数来调整学习率。这个函数通常是一个简单的数学表达式。
scheduler = LambdaLR(optimizer, lr_lambda=lambda epoch: 0.95 ** epoch)ReduceLROnPlateau:当某个指标(如损失)在一定步数内没有变化时,减少学习率。你需要指定一个指标来监控(例如,使用 val_loss),以及如何减少学习率(factor)和最小的学习率(min_lr)。
scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10)CyclicLR:在训练过程中周期性地改变学习率,通常用于循环学习率策略,以提高模型的泛化能力。
scheduler = CyclicLR(optimizer, base_lr=0.01, max_lr=0.1)OneCycleLR:类似于CyclicLR,但更加复杂和智能,适用于快速训练过程。
scheduler = OneCycleLR(optimizer, max_lr=0.1, total_steps=100)这些调度器可以根据不同的需求选择使用,以获得更好的训练效果。通常,你需要在每个 epoch 结束后调用
scheduler.step() 来更新学习率。