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)[source]#
当指标停止改进时,降低学习率。
模型通常受益于在学习停滞后将学习率降低 2-10 倍。此调度程序读取指标数量,如果在“耐心”个 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。
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)