使用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 还提供其他可调节的参数,例如 mode、verbose 等,用于进一步控制回调函数的行为。可以根据实际需求进行调整。
