Keras предоставляет несколько встроенных показателей, которые можно напрямую использовать для оценки производительности модели. Тем не менее, нередко включают пользовательские обратные вызовы, чтобы выйти за рамки возможностей keras, как мне самому недавно пришлось сделать. В этом посте я расскажу, как использовать пользовательские вычисляемые значения (метрики, потери) со встроенными обратными вызовами.

Прежде чем продолжить, нам нужно будет определить собственный пользовательский обратный вызов для выполнения вычислений, которые мы хотим использовать для отслеживания хода обучения или оценки производительности модели. Ниже приведен фиктивный код для определения пользовательского обратного вызова.

CustomCallback(keras.callbacks.Callback):
   def on_epoch_end(self, epoch, logs={}):
            :
      do_somthing_here
            :
      logs["metric_name"] = metric_value

После определения пользовательского обратного вызова соответствующую пользовательскую метрику можно включить в другие обратные вызовы.

ckpt_callback = ModelCheckpoint(
    path_to_file,
    monitor="metric_name",
    mode="Specify depending on desired behavior of the metric",  
    save_freq="as above",
)

Это поведение не ограничивается обменом данными из пользовательских обратных вызовов со встроенными обратными вызовами, но может быть распространено на все обратные вызовы, поскольку объект «журнал» автоматически передается всем им через model.fit(). Аналогичный рабочий процесс будет работать с другими обратными вызовами по умолчанию, такими как EarlyStopping и т. д., где функциональность зависит от определенного пользователем значения/метрики.

Внимание. Убедитесь, что обратные вызовы выстроены в model.fit() в порядке обновления информации. В приведенном выше примере, если обратный вызов ModelCheckpoint указан перед пользовательским обратным вызовом, он будет работать асинхронно по отношению к пользовательской метрике, поскольку он будет использовать значение метрики из предыдущего шага.

Следовательно, здесь искомый порядок будет следующим:

model.fit(
    train_generator,
         :         ,
    epochs,
    callbacks = [CustomCallback, ckpt_callback]
     )

Теперь вы готовы более гибко управлять обучением своей модели машинного обучения.

Если вы считаете подобные истории ценными и хотели бы поддержать меня как писателя, рассмотрите возможность подписаться на членство в Medium. Это 5 долларов в месяц и дает вам неограниченный доступ к статьям Medium. Регистрация по реферальной ссылке принесет мне небольшую комиссию без каких-либо дополнительных затрат для вас.