评价此页

ReduceLROnPlateau#

class 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)[源码]#

当指标停止改进时,降低学习率。

模型通常受益于在学习停滞后将学习率降低 2-10 倍。该调度器读取一个指标数量,如果在“patience”个 epoch 内没有看到改进,学习率就会降低。

参数:
  • optimizer (Optimizer) – 包装的优化器。

  • mode (str) – “min”或“max”之一。在“min”模式下,当监测到的数量停止减少时,学习率会降低;在“max”模式下,当监测到的数量停止增加时,学习率会降低。默认值:“min”。

  • factor (float) – 学习率将要降低的因子。 new_lr = lr * factor。默认值:0.1。

  • patience (int) – 在学习率降低之前允许的没有改进的 epoch 数量。例如,考虑没有耐心(patience = 0)的情况。在第一个 epoch,会建立一个基线,并且因为没有先前的基线,它总是被认为是好的。在第二个 epoch,如果性能比基线差,我们称之为不可容忍的 epoch。由于不可容忍 epoch 的计数(1)大于耐心级别(0),学习率会在该 epoch 结束时降低。从第三个 epoch 开始,如果性能比基线差,学习率将在每个 epoch 结束时继续降低。如果性能提高或保持不变,则不调整学习率。默认值:10。

  • threshold (float) – 用于测量新最优值的阈值,以便仅关注显著变化。默认值:1e-4。

  • threshold_mode (str) – “rel”或“abs”之一。在“rel”模式下,dynamic_threshold = best * ( 1 + threshold )(在“max”模式下)或 best * ( 1 - threshold )(在“min”模式下)。在“abs”模式下,dynamic_threshold = best + threshold(在“max”模式下)或 best - threshold(在“min”模式下)。默认值:“rel”。

  • cooldown (int) – 学习率降低后恢复正常操作前需要等待的 epoch 数量。默认值:0。

  • min_lr (floatlist) – 一个标量或一个标量列表。所有参数组或每个组的学习率的下界。默认值:0。

  • eps (float) – 应用于 lr 的最小衰减。如果新旧 lr 之间的差异小于 eps,则忽略更新。默认值:1e-8。

示例

>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
>>> scheduler = ReduceLROnPlateau(optimizer, "min")
>>> for epoch in range(10):
>>>     train(...)
>>>     val_loss = validate(...)
>>> # Note that step should be called after validate()
>>>     scheduler.step(val_loss)
../_images/ReduceLROnPlateau.png
get_last_lr()[源码]#

获取此调度器计算的最新学习率。

返回:

一个 list,其中包含优化器的每个 param_groups 的学习率条目,其类型与其 group["lr"] 相同。

返回类型:

list[float | Tensor]

注意

返回的 Tensor 是副本,并且从不别名优化器的 group["lr"]

get_lr()[源码]#

计算优化器 param_groups 中每个参数组的下一个学习率。

返回:

一个 list,其中包含优化器每个 param_groups 的学习率,其类型与其当前 group["lr"] 相同。

返回类型:

list[float | Tensor]

注意

如果您想检查最新的学习率,请使用 get_last_lr() 而不是。

注意

返回的 Tensor 是副本,并且从不别名优化器的 group["lr"]

load_state_dict(state_dict)[源码]#

加载调度器的状态。

state_dict()[源码]#

返回调度器状态,作为一个 dict

它包含 self.__dict__ 中不是优化器的每个变量的条目。

返回类型:

dict[str, Any]

step(metrics, epoch=None)[源码]#

执行一步。