在 timm
中,我们总共有四种不同的调度器
在本教程中,我们将详细介绍每种调度器,并探讨如何使用 timm
训练脚本利用这些调度器训练模型,或者将它们用作自定义 PyTorch 训练脚本的独立调度器。
在本节中,我们将介绍 timm
中各种可用的调度器。
首先,我们来看一下在 timm
中也称为 cosine
调度器的 SGDR
调度器。
SGDR
调度器,即 带暖启动的随机梯度下降
调度器,使用余弦调度来安排学习率,但进行了一些调整。它会在经过一定数量的 epoch 后将学习率重置为初始值。

注意: 与 PyTorch 内置的调度器不同,此调度器应在每个 epoch 结束时(在增加 epoch 计数之前)被一致调用,以计算下一个 epoch 的值;并在每次优化器更新结束时(在增加更新计数之后)被一致调用,以计算下一个更新的值。
StepLR
是一种基本的阶梯式学习率调度器,支持预热和噪声。
注意: PyTorch 的实现不支持预热或噪声。
StepLR
退火调度如下所示:

在经过一定数量的 decay_epochs
后,学习率会更新为 lr * decay_rate
。在上面的 StepLR
调度中,decay_epochs
设置为 30,decay_rate
设置为 0.5,初始 lr
为 1e-4。
这也称为 tanh
退火。tanh
代表双曲正切衰减。使用此调度器进行退火如下所示:

它与 SGDR
类似,都是在经过一定数量的 epoch 后将学习率设置为初始 lr
,但退火是使用 tanh
函数完成的。
此调度器与 PyTorch 的 ReduceLROnPlateau 调度器非常相似。基本思想是跟踪评估指标,并根据评估指标的值,如果在一定数量的 epoch 内评估指标停滞不前,则使用 StepLR
降低 lr
。
使用 timm
的训练脚本训练模型非常简单。基本上,我们只需使用 --sched
标志传递一个参数来指定要使用的调度器以及各种超参数。
- 对于
SGDR
,我们传递--sched cosine
。 - 对于
PlatueLRScheduler
,我们传递--sched plateau
。 - 对于
TanhLRScheduler
,我们传递--sched tanh
。 - 对于
StepLR
,我们传递--sched step
。
因此,调用训练脚本看起来像这样:
python train.py --sched cosine --epochs 200 --min-lr 1e-5 --lr-cycle-mul 2 --lr-cycle-limit 2