ReduceLROnPlateau

class paddle.callbacks.ReduceLROnPlateau ( monitor=’loss’, factor=0.1, patience=10, verbose=1, mode=’auto’, min_delta=1e-4, cooldown=0, min_lr=0 )

该回调函数会在评估指标停止改善时,降低学习率。模型通常会因学习率降低2-10倍而受益。因此监视一个评价指标,如果这个指标在几个epoch内没有改善,就降低学习率。

参数:

  • monitor (str,可选) - 监视的指标名称。默认值:’loss’。

  • factor (float,可选) - 学习率减小的因子。 new_lr = lr * factor 。默认值:0.1。

  • patience (int,可选) - 多少个epoch监视的指标没有提升后就减小学习率。默认值:10。

  • verbose (int,可选) - 可视化的模式。0表示不打印任何信息,1表示打印信息。默认值:1。

  • mode (int,可选) - 必须是 {‘auto’, ‘min’, ‘max’} 中的值。’min’ 表示学习率会减少当监视的指标不再下降。 ‘max’ 表示学习率会减少当监视的指标不再上升。 ‘auto’ 会根据监视指标的名字来推理是使用min还是max模式,如果名字中包含acc则使用max模式,否则使用min模式。 默认值:’auto’。

  • min_delta (float,可选) - 评判指标增大或减小的阈值。默认值:0。

  • cooldown (int,可选) - 学习率减少后至少经过多少个epoch在进行正常的减少策略。默认值:0。

  • min_lr (int,可选) - 学习率减小后的下限。默认值:0。

代码示例

  1. import paddle
  2. from paddle import Model
  3. from paddle.static import InputSpec
  4. from paddle.vision.models import LeNet
  5. from paddle.vision.datasets import MNIST
  6. from paddle.metric import Accuracy
  7. from paddle.nn.layer.loss import CrossEntropyLoss
  8. import paddle.vision.transforms as T
  9. sample_num = 200
  10. transform = T.Compose(
  11. [T.Transpose(), T.Normalize([127.5], [127.5])])
  12. train_dataset = MNIST(mode='train', transform=transform)
  13. val_dataset = MNIST(mode='test', transform=transform)
  14. net = LeNet()
  15. optim = paddle.optimizer.Adam(
  16. learning_rate=0.001, parameters=net.parameters())
  17. inputs = [InputSpec([None, 1, 28, 28], 'float32', 'x')]
  18. labels = [InputSpec([None, 1], 'int64', 'label')]
  19. model = Model(net, inputs=inputs, labels=labels)
  20. model.prepare(
  21. optim,
  22. loss=CrossEntropyLoss(),
  23. metrics=[Accuracy()])
  24. callbacks = paddle.callbacks.ReduceLROnPlateau(patience=3, verbose=1)
  25. model.fit(train_dataset,
  26. val_dataset,
  27. batch_size=64,
  28. log_freq=200,
  29. save_freq=10,
  30. epochs=20,
  31. callbacks=[callbacks])