Класс ReduceLROnPlateau
Класс ReduceLROnPlateau представляет собой колбэк, который снижает скорость обучения модели в процессе тренировки, если указанная метрика (например, потери на валидации) перестает улучшаться в течение заданного числа эпох. Первым параметром передается monitor - имя метрики для отслеживания, вторым - factor - коэффициент, на который умножается текущая скорость обучения. Третьим параметром является patience - количество эпох без улучшений перед снижением. Также доступны параметры mode, min_delta, cooldown, min_lr и другие.
Синтаксис
tf.keras.callbacks.ReduceLROnPlateau(
monitor='val_loss',
factor=0.1,
patience=10,
mode='auto',
min_delta=0.0001,
cooldown=0,
min_lr=0.0,
verbose=0
)
Пример
Давайте создадим простую модель и обучим ее с колбэком ReduceLROnPlateau, который будет следить за потерями на валидации. Зафиксируем зерно для воспроизводимости:
import tensorflow as tf
tf.random.set_seed(0)
# Create a simple model
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation='relu', input_shape=(5,)),
tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
# Create dummy data
import numpy as np
x = np.random.rand(100, 5)
y = np.random.rand(100, 1)
# Define the callback
lr_callback = tf.keras.callbacks.ReduceLROnPlateau(
monitor='val_loss',
factor=0.5,
patience=3,
verbose=1
)
# Train the model
history = model.fit(
x, y,
validation_split=0.2,
epochs=10,
batch_size=16,
callbacks=[lr_callback],
verbose=0
)
print("Training finished.")
Результат выполнения кода:
"Training finished."
Пример
Давайте посмотрим, как изменяется скорость обучения после срабатывания колбэка. Для этого выведем текущий learning rate до и после тренировки:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation='relu', input_shape=(5,)),
tf.keras.layers.Dense(1)
])
optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)
model.compile(optimizer=optimizer, loss='mse')
import numpy as np
x = np.random.rand(100, 5)
y = np.random.rand(100, 1)
lr_callback = tf.keras.callbacks.ReduceLROnPlateau(
monitor='val_loss',
factor=0.1,
patience=2,
verbose=1
)
print("Initial learning rate:", optimizer.learning_rate.numpy())
model.fit(
x, y,
validation_split=0.2,
epochs=10,
batch_size=16,
callbacks=[lr_callback],
verbose=0
)
print("Final learning rate:", optimizer.learning_rate.numpy())
Результат выполнения кода:
Initial learning rate: 0.01
Final learning rate: 0.001
Смотрите также
-
класс
EarlyStopping,
который останавливает обучение при отсутствии улучшений -
класс
LearningRateScheduler,
который позволяет задать собственное расписание скорости обучения -
класс
ModelCheckpoint,
который сохраняет модель во время обучения -
класс
Adam,
который является одним из популярных оптимизаторов