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。

代码示例

import paddle
from paddle import Model
from paddle.static import InputSpec
from paddle.vision.models import LeNet
from paddle.vision.datasets import MNIST
from paddle.metric import Accuracy
from paddle.nn.layer.loss import CrossEntropyLoss
import paddle.vision.transforms as T
sample_num = 200
transform = T.Compose(
    [T.Transpose(), T.Normalize([127.5], [127.5])])
train_dataset = MNIST(mode='train', transform=transform)
val_dataset = MNIST(mode='test', transform=transform)
net = LeNet()
optim = paddle.optimizer.Adam(
    learning_rate=0.001, parameters=net.parameters())
inputs = [InputSpec([None, 1, 28, 28], 'float32', 'x')]
labels = [InputSpec([None, 1], 'int64', 'label')]
model = Model(net, inputs=inputs, labels=labels)
model.prepare(
    optim,
    loss=CrossEntropyLoss(),
    metrics=[Accuracy()])
callbacks = paddle.callbacks.ReduceLROnPlateau(patience=3, verbose=1)
model.fit(train_dataset,
            val_dataset,
            batch_size=64,
            log_freq=200,
            save_freq=10,
            epochs=20,
            callbacks=[callbacks])