В этом руководстве мы поймем ключевую роль функций обратного вызова при обучении модели глубокого обучения.
Обучение модели глубокого обучения требует много времени. Иногда может случиться так, что вы работаете с моделью несколько дней и не можете найти минимально ожидаемых результатов. Таким образом, мы можем преодолеть это, управляя некоторыми функциями обратного вызова и отслеживая потери, точность и т. Д. Во время обучения.
Keras - это библиотека глубокого обучения, построенная поверх других библиотек глубокого обучения, таких как Tensorflow, CNTK, Theano.
Давайте обсудим следующие функции обратного вызова:
- Базовый регистратор
- Завершить при NaN
- Progbar Logger
- История
- Контрольная точка модели
- Ранняя остановка
- Удаленный монитор
- Планировщик скорости обучения
- ReduceLR на плато
- Регистратор CSV
- Лямбда-обратный вызов
- TensorBoard
Давайте посмотрим на использование каждого обратного вызова
1 - BaseLogger:
from keras.callbacks import BaseLogger baselogger = BaseLogger(stateful_metrics = None)
По умолчанию stateful_metrics = None
; Это означает, что любая точность и потери, которые мы получаем после каждой эпохи, на самом деле являются средним значением точности / потерь по всем партиям в эту эпоху.
если мы передадим stateful_metrics = [‘acc’, ‘loss’]
, тогда мы сможем получить потери и точность для финальной партии вместо ср. стоимость всех партий за эпоху.
2 - Завершить при NaN:
from keras.callbacks import TerminateOnNaN terminate = TerminateOnNaN()
Если при обучении модели глубокого обучения мы передадим этот конечный объект в список обратных вызовов, то обучение будет остановлено, когда потеря NaN будет обнаружена после определенной эпохи.
3 - Progbar Logger:
from keras.callbacks import ProgbarLogger progbar = ProgbarLogger(count_mode=’samples’, stateful_metrics=None)
count_mode = «образцы» или «шаги». Для управления отображением прогбара «шаги» (количество просмотренных партий) или «образцы» (количество просмотренных образцов).
stateful_metrics = [‘acc’], все показатели (в виде строк), которые мы передаем внутри этого списка, не будут усредняться за эпоху. Все остальные метрики будут усреднены за эпоху (как описано в BaseLogger).
4 - История:
from keras.callbacks import History model_history = History()
Эта функция обратного вызова записывает / регистрирует все события модели для каждой эпохи в объекте model_history
model_history.epoch
возвращает список эпох
model_history.history
возвращает словарь с ключами как разные события и их значения после каждой эпохи как список
model_history.keys()
возвращает все различные события, использованные во время тренировки
model_history.params()
предоставляет информацию обо всех параметрах, используемых при обучении модели.
5 - ModelCheckpoint:
from keras.callbacks import ModelCheckpoint checkpoint = ModelCheckpoint(filepath, monitor=’val_loss’, verbose=0, save_best_only=False, save_weights_only=False, mode=’auto’, period=1)
Этот обратный вызов используется для сохранения лучшей модели или моделей после каждой эпохи и использования ее для прогнозов в будущем.
путь к файлу: путь для сохранения модели «.../classifier.hdf5
». если вы хотите сохранять после каждой эпохи, ".../classifier-{epoch:02d}-{val_acc:.2f}.hdf5".
монитор: событие, на основании которого вы хотите сохранить свою модель. Если это значение val_loss, то мы получим лучшую модель, в которой значение val_loss наименьшее среди всех эпох. Если его точность, то мы получим лучшую модель, в которой значение val_acc является самым высоким среди всех эпох.
подробный: 1 означает, что мы узнаем, что происходит во время обучения в терминале.
save_best_only: если задано значение True, будет сохранена только лучшая модель. Если значение равно False, модель будет сохраняться после каждой эпохи.
режим: обычно используется «авто». Если режим установлен на «min» и monitor = «val_loss», то модель будет сохранена только в том случае, если значение val_loss будет уменьшено. Если режим установлен на «max» и monitor = «val_acc». тогда модель будет сохранена только в случае улучшения val_acc.
save_weights_only: если задано значение True, будут сохранены только веса модели. В противном случае будет сохранена вся модель.
период: целое число, если его 2, то через каждые 2 эпохи будет вызываться этот обратный вызов.
6 - Ранняя остановка:
from keras.callbacks import EarlyStopping earlystopping = EarlyStopping(monitor=’val_loss’, min_delta=0, patience=0, verbose=0, mode=’auto’, baseline=None, restore_best_weights=False)
EarlyStopping предотвращает переобучение модели.
Модель автоматически прекращает обучение, когда отслеживаемое событие перестает улучшаться без терпения.
монитор, режим: то же, что и в ModelCheckpoint
min_delta: минимальное количество изменений, которое должно произойти в отслеживаемом событии, чтобы рассматривать его как улучшение. Если min_delta равно 0,5, monitor = ‘val_acc’, тогда, если точность не улучшается на 0,5 после каждой эпохи, это не считается улучшением. разница рассчитывается ч / б текущим событием и лучшим событием.
терпение: количество эпох, в течение которых следует ждать улучшения отслеживаемого события.
restore_best_weights: после получения лучших весов в определенную эпоху модель все еще работает, пока не превысит уровень терпения. Итак, чтобы получить наилучшие веса, установите для этого параметра значение True.
базовый: минимальная сумма, которую вы должны получить за отслеживаемое событие. Допустим, вы отслеживаете «val_acc», базовый уровень = 0,85, но если ваш val_acc = 0,75 после определенных эпох (›терпение), ваша модель перестает обучаться.
7 - Удаленный мониторинг:
from keras.callbacks import RemoteMonitor() remotemonitor = RemoteMonitor(root=’http://localhost:5000', path=’/publish/epoch/end/’, field=’data’, headers=None, send_as_json=False)
Этот обратный вызов используется для потоковой передачи событий на сервер.
8 - Планировщик LearningRate:
from keras.callbacks import LearningRateScheduler lrscheduler = LearningRateScheduler(schedule,verbose)
Во время обучения модели скорость обучения определяет, как должны измениться веса и смещения.
Если наша скорость обучения (альфа) слишком мала, нейронной сети будет слишком сложно обучаться.
Если наша скорость обучения (альфа) слишком высока, тогда модель может выйти за глобальный минимум.
W = w + (альфа). Градиент
альфа: шаг / прыжок мы делаем по градиенту
Если мы обучаем нашу модель для всех эпох с одинаковой скоростью обучения, она эффективна не во всех случаях. По мере того, как мы приближаемся к глобальному минимуму, уменьшение нашего LR помогает модели лучше сходиться.
Существует 3 типа графиков LR: временное затухание, экспоненциальное затухание и ступенчатое затухание.
schedule: функция, которая принимает индекс эпохи и текущий lr в качестве входных данных и возвращает обновленный lr.
9 - Уменьшите LR на плато:
from keras.callbacks import ReduceLROnPlateau reduce_lr = ReduceLROnPlateau(monitor=’val_loss’, factor=0.1, patience=10, verbose=0, mode=’auto’, min_delta=0.0001, cooldown=0, min_lr=0)
кулдаун: количество периодов ожидания, чтобы применить изменения после уменьшения LR.
Этот обратный вызов используется для снижения скорости обучения, когда показатель перестает улучшаться сверх уровня терпения.
10 - CSVLogger:
from keras.callbacks import CSVLogger csvlogger = CSVLogger(filename, separator=’,’ , append=False)
Этот обратный вызов сохраняет все события в CSV-файл.
имя_файла: имя файла для сохранения в виде CSV-файла.
seperator: строка, используемая для разделения элементов в CSV-файле.
append: если установлено значение true, результаты обучения добавляются в тот же файл CSV. если установлено значение False, он перезаписывает файл csv.
12. Тензорборд:
from keras.callbacks.tensorboard_v1 import TensorBoard tensorboard = TensorBoard(log_dir=’./logs’, histogram_freq=0, batch_size=32, write_graph=True, write_grads=False, write_images=False, embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None, embeddings_data=None, update_freq=’epoch’)
Запустите эту команду в своем терминале:
tensorboard — logdir=“path to logs file”
для визуализации результатов.
В тензорной таблице мы можем видеть только потери и точность для каждой эпохи. Чтобы отображать значения потерь и точности в конце каждого пакета в тензорной таблице, нам нужно написать собственный обратный вызов.