Использование Пользовательских Функций Потерь И Показателей Качества Обучения В Keras

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

Для этого используются функция потерь и метрика точности.

Эти показатели различаются в зависимости от поставленной задачи (классификация или сегментация изображений, обнаружение объектов, регрессия).

В Keras мы можем определить собственную функцию потерь и показатели точности для нашей конкретной задачи.

О таких кастомных функциях и пойдет речь в статье.

Кому интересно, смотрите кат.



Пользовательские функции потерь в Keras

Например, предположим, что нам нужно реализовать функцию средней средней ошибки (MAE).

Пользовательскую функцию потерь MAE можно реализовать следующим образом:

  
  
  
  
   

from keras import backend as K def mae(y_true, y_pred): true_value = K.sum(y_true * K.arange(0, 100, dtype="float32"), axis=-1) pred_value = K.sum(y_pred * K.arange(0, 100, dtype="float32"), axis=-1) mae = K.mean(K.abs(true_value - pred_value)) return mae

Здесь мы используем функции суммы, диапазона, среднего и абс, определенные в Keras. Таким же образом вы можете определить показатель точности.

Например, давайте определим метрику Earth_movers_distance для сравнения двух гистограмм:

from keras import backend as K def earth_movers_distance(y_true, y_pred): cdf_true = K.cumsum(y_true, axis=-1) cdf_pred = K.cumsum(y_pred, axis=-1) emd = K.sqrt(K.mean(K.square(cdf_true - cdf_pred), axis=-1)) return K.mean(emd)

Чтобы использовать наши метрики mae и Earth_movers_distance, мы импортируем соответствующие функции из отдельного модуля и добавляем их в параметры потерь и метрики при компиляции модели:

from utils.metrics import mae, earth_movers_distance loss = earth_movers_distance model.compile(optimizer=optimizer, loss=loss, metrics=[mae, "accuracy"])



Загрузка модели Keras с пользовательской функцией потерь

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

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

Когда мы загружаем обученные веса из файла h5 для модели с помощью метода load_weights, мы можем получить такую ошибку:

ValueError: Unknown loss function:earth_movers_distance

Это известная ошибка в Керасе (о ней написал в официальном репозитории GitHub).

Чтобы решить проблему, нам нужно добавить в Keras наши собственные функции потерь и показатели качества:

from keras.utils.generic_utils import get_custom_objects get_custom_objects().

update({"earth_movers_distance": earth_movers_distance, "age_mae": age_mae})

Это все на данный момент. Удачи всем и до новых встреч! Теги: #Машинное обучение #оптимизация #нейронные сети #Keras #метрики качества #функция потерь #потеря

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.