欢迎访问宙启技术站
智能推送

使用ReduceLROnPlateau()回调函数在tensorflow.keras中自动降低学习率

发布时间:2023-12-18 09:56:43

在 tensorflow.keras 中,可以使用 ReduceLROnPlateau 回调函数来自动降低学习率。ReduceLROnPlateau 会监控模型的某个指标,例如验证损失或验证准确率,当指标在一定轮次内不再改善时,会减小学习率。

下面是一个使用 ReduceLROnPlateau 回调函数的例子,其中我们将使用一个简单的卷积神经网络对 MNIST 数据集进行训练,并使用 ReduceLROnPlateau 来自动调整学习率:

首先,我们需要导入必要的库和模块:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.datasets import mnist
from tensorflow.keras.callbacks import ReduceLROnPlateau

然后,加载并准备数据集:

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape((-1, 28, 28, 1)) / 255.0
x_test = x_test.reshape((-1, 28, 28, 1)) / 255.0

创建模型并编译:

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(128, activation='relu'),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

定义 ReduceLROnPlateau 回调函数:

reduce_lr = ReduceLROnPlateau(monitor='val_loss',
                              factor=0.1,
                              patience=5,
                              min_lr=0.00001)

在模型训练过程中,将 ReduceLROnPlateau 作为回调函数传入 fit() 方法:

model.fit(x_train, y_train, epochs=20, batch_size=32, validation_data=(x_test, y_test), callbacks=[reduce_lr])

在上述代码中,ReduceLROnPlateau 的参数说明如下:

- monitor:要监控的指标,例如验证损失('val_loss')或验证准确率('val_accuracy')。

- factor:学习率将被减小的因子。新的学习率 = 学习率 * factor。

- patience:在经过多少个 epoch 都没有改善时,学习率将被减小。

- min_lr:学习率的下限。

这样,在训练过程中,ReduceLROnPlateau 会监控指定的指标,当指标在 patience 轮次内不再改善时,会减小学习率,以帮助模型更好地收敛。

除了上述例子中使用的参数,ReduceLROnPlateau 还提供其他可调节的参数,例如 modeverbose 等,用于进一步控制回调函数的行为。可以根据实际需求进行调整。