Keras предоставляет два метода адаптации скорости обучения, которые можно реализовать с помощью функций обратного вызова.
keras.callbacks.LearningRateScheduler(schedule)
Эта функция обратного вызова является планировщиком скорости обучения.
- расписание: функция, которая принимает номер эпохи в качестве параметра (целое число от 0) и возвращает новую скорость обучения (число с плавающей запятой)
import keras.backend as K
from keras.callbacks import LearningRateScheduler
def scheduler(epoch):
# каждые 100 эпохи , скорость обучения снижается до 1/10 от исходной
if epoch % 100 == 0 and epoch != 0:
lr = K.get_value(model.optimizer.lr)
K.set_value(model.optimizer.lr, lr * 0.1)
print("lr changed to {}".format(lr * 0.1))
return K.get_value(model.optimizer.lr)
reduce_lr = LearningRateScheduler(scheduler)
model.fit(train_x, train_y, batch_size=32, epochs=300, callbacks=[reduce_lr])
keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0)
Когда индекс оценки не улучшается, уменьшите скорость обучения
При обучении киосков снижение скорости обучения в 2 или 10 раз часто дает лучшие результаты. Функция обратного вызова определяет состояние индикатора, и если улучшение производительности модели не наблюдается в периоды пациентов, скорость обучения снижается.
- монитор: количество для мониторинга
- фактор: Коэффициент, на который каждый раз уменьшается скорость обучения, скорость обучения будет уменьшаться в виде lr = lr*фактор
- терпение: когда эпохи терпения прошли, а производительность модели не улучшилась, будет запущено действие по снижению скорости обучения.
- режим: один из «авто», «минимум», «макс», в минимальном режиме, если обнаруженное значение запускает снижение скорости обучения. В максимальном режиме снижение скорости обучения запускается, когда обнаруженное значение больше не растет.
- эпсилон: порог, используемый для определения, следует ли вводить «простую область» значения обнаружения.
- перезарядка: после того, как скорость обучения уменьшится, нормальная работа будет перезапущена после эпох перезарядки.
- min_lr: нижняя граница скорости обучения
- from keras.callbacks import ReduceLROnPlateau
- reduce_lr = ReduceLROnPlateau(monitor='val_loss', patience=10, mode='auto')
- model.fit(train_x, train_y, batch_size=32, epochs=300, validation_split=0.1, callbacks=[reduce_lr])