При обучении нейронной сети на обучающей выборке на выходе нейронной сети рассчитываются два ключевых параметра эффективности обучения: ошибка и точность прогнозирования.
Для этого используются функция потерь и метрика точности.
Эти показатели различаются в зависимости от поставленной задачи (классификация или сегментация изображений, обнаружение объектов, регрессия).
В Keras мы можем определить собственную функцию потерь и показатели точности для нашей конкретной задачи.
О таких кастомных функциях и пойдет речь в статье.
Кому интересно, смотрите кат.
Пользовательские функции потерь в Keras
Например, предположим, что нам нужно реализовать функцию средней средней ошибки (MAE).Пользовательскую функцию потерь MAE можно реализовать следующим образом:
Здесь мы используем функции суммы, диапазона, среднего и абс, определенные в Keras. Таким же образом вы можете определить показатель точности.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
Например, давайте определим метрику 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 #метрики качества #функция потерь #потеря
-
Домашняя Лошадь
19 Oct, 24 -
Очередной Проект На Esp8266 И Счетчике Воды
19 Oct, 24 -
Ссылка - Ох, Как Чудесно В Этом Слове...
19 Oct, 24 -
[Usr] Простые Декодеры
19 Oct, 24 -
Создание Цепочки Поведения
19 Oct, 24 -
30 Полезных Сервисов Для Веб-Разработчиков
19 Oct, 24