Keras Early Stopping

Я тренирую нейронную сеть для своего проекта, используя Keras. Keras предоставила функцию для ранней остановки. Могу ли я узнать, какие параметры следует соблюдать, чтобы избежать перенастройки моей нейронной сети с помощью ранней остановки?

Ответ 1

early stopping

Ранняя остановка в основном останавливает тренировку, когда ваша потеря начинает увеличиваться (или, другими словами, точность проверки начинает уменьшаться). Согласно документам, он используется следующим образом;

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=0,
                              verbose=0, mode='auto')

Значения зависят от вашей реализации (проблема, размер партии и т.д.), Но в целом для предотвращения переопределения я бы использовал;

  1. Контролируйте потери при проверке (необходимо использовать перекрестную проверку или, по крайней мере, набор поездов/тестов), установив аргумент monitor в значение 'val_loss'.
  2. min_delta - это пороговое значение для количественного определения потери в какую-то эпоху как улучшение или нет. Если разница потерь ниже min_delta, она определяется количественно как отсутствие улучшения. Лучше оставить его как 0, так как нас интересует, когда убыток становится хуже.
  3. аргумент patience представляет количество эпох до остановки, как только ваша потеря начинает увеличиваться (перестает улучшаться). Это зависит от вашей реализации, если вы используете очень маленькие партии или большую скорость обучения, ваша потеря zig-zag (точность будет более шумной), поэтому лучше установить большой аргумент patience. Если вы используете большие партии и небольшую скорость обучения, ваша потеря будет более плавной, поэтому вы можете использовать аргумент меньшего patience. В любом случае я оставлю это как 2, поэтому я дам модели больше шансов.
  4. verbose решает, что печатать, оставьте его по умолчанию (0).
  5. аргумент mode зависит от того, в каком направлении контролируется ваше количество (оно должно уменьшаться или увеличиваться), поскольку мы отслеживаем потерю, мы можем использовать min. Но позвольте оставить keras обработать это для нас и установить, чтобы auto

Поэтому я бы использовал что-то вроде этого и экспериментировал, построив потерю ошибки с ранней остановкой и без нее.

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=2,
                              verbose=0, mode='auto')

Для возможной двусмысленности в том, как работают обратные вызовы, я попытаюсь объяснить больше. Как только вы вызываете fit(... callbacks=[es]) на вашей модели, Keras вызывает заданные объекты обратного вызова, предопределенные функции. Эти функции можно назвать on_train_begin, on_train_end, on_epoch_begin, on_epoch_end и on_batch_begin, on_batch_end. Ранняя остановка обратного вызова вызывается на каждом конце эпохи, сравнивает лучшее контролируемое значение с текущим и останавливается, если условия выполняются (сколько эпох прошло с момента наблюдения за наилучшим контролируемым значением, и это больше, чем аргумент терпения, разница между последнее значение больше min_delta и т.д.).

Как было отмечено на @BrentFaust в комментариях, модель обучение будет продолжаться до тех пор, либо Ранние условия Stopping не будут выполнены или epochs параметр ( по умолчанию = 10) в fit() выполняется. Установка Early обратного вызова ОСТАНОВКИ не будет делать модель для обучения за ее epochs параметра. Поэтому вызов функции fit() с более epochs значением epochs будет больше полезен при обратном вызове Early Stopping.