Как правило, целевая функция в обучении с учителем состоит из функции потерь и члена регуляризации. (Objective = Loss + Regularization)
Для модели Keras член регуляризации в целевой функции обычно указывается на каждом уровне, например, можно указать использование регуляризации L1 или L2 для весов, используя такие параметры, как kernel_regularizer и bias_regularizer в Dense, а также можно использовать параметры kernel_constraint и bias_constraint для ограничения диапазона значений весов, что также является своего рода регуляризацией.
Функция потерь задается при компиляции модели. Для регрессионных моделей обычно используется функция потерь среднеквадратичной ошибки mean_squared_error.
Для бинарных классификационных моделей обычно используется бинарная кросс-энтропийная функция потерь binary_crossentropy.
Для многоклассовых моделей, если метка закодирована one-hot, следует использовать категориальную кросс-энтропийную функцию потерь categorical_crossentropy. Если метка закодирована номерами классов, необходимо использовать разреженную категориальную кросс-энтропийную функцию потерь sparse_categorical_crossentropy.
При необходимости можно также определить пользовательскую функцию потерь. Пользовательская функция потерь должна принимать два тензора y_true и y_pred в качестве входных параметров и выводить одно скалярное значение в качестве значения функции потерь.
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras import layers,models,losses,regularizers,constraints
tf.keras.backend.clear_session()
model = models.Sequential()
model.add(layers.Dense(64, input_dim=64,
kernel_regularizer=regularizers.l2(0.01),
activity_regularizer=regularizers.l1(0.01),
kernel_constraint = constraints.MaxNorm(max_value=2, axis=0)))
model.add(layers.Dense(10,
kernel_regularizer=regularizers.l1_l2(0.01,0.01),activation = "sigmoid"))
model.compile(optimizer = "rmsprop",
loss = "binary_crossentropy",metrics = ["AUC"])
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 64) 4160
_________________________________________________________________
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 4,810
Trainable params: 4,810
Non-trainable params: 0
_________________________________________________________________
Встроенные функции потерь обычно имеют две формы реализации: класс и функцию. Например, CategoricalCrossentropy и categorical_crossentropy являются категориальными функциями кросс-энтропии, первая — это реализация класса, вторая — реализация функции. Некоторые часто используемые встроенные функции потерь описаны ниже.
Пользовательская функция потерь принимает два тензора y_true и y_pred в качестве входных данных и выводит одно скалярное значение как значение функции потерь. Можно также создать подкласс tf.keras.losses.Loss и переопределить метод call для реализации логики вычисления потерь, чтобы получить реализацию функции потерь на уровне класса. Ниже приведен пример пользовательской реализации Focal Loss, которая представляет собой улучшенную форму функции потерь binary_crossentropy. Она имеет явные преимущества по сравнению с binary_crossentropy при несбалансированных выборках и наличии большого количества легко классифицируемых выборок. У нее есть два настраиваемых параметра: alpha и gamma. Параметр alpha в основном используется для уменьшения веса отрицательных образцов, а параметр gamma — для уменьшения веса легко обучаемых образцов. Это позволяет модели сосредоточиться на положительных и трудных образцах. Вот почему эта функция потерь называется Focal Loss. Подробнее см. в статье «5 минут понимания Focal Loss и GHM — решение проблемы несбалансированности выборки». https://zhuanlan.zhihu.com/p/80594704 $$focal_loss(y,p) = \begin{cases} -\alpha (1-p)^{\gamma}\log(p) & \text{if y = 1}\\ -(1-\alpha) p^{\gamma}\log(1-p) & \text{if y = 0} \end{cases} $$
def focal_loss(gamma=2., alpha=0.75):
def focal_loss_fixed(y_true, y_pred):
bce = tf.losses.binary_crossentropy(y_true, y_pred)
p_t = (y_true * y_pred) + ((1 - y_true) * (1 - y_pred))
alpha_factor = y_true * alpha + (1 - y_true) * (1 - alpha)
modulating_factor = tf.pow(1.0 - p_t, gamma)
loss = tf.reduce_sum(alpha_factor * modulating_factor * bce,axis = -1 )
return loss
return focal_loss_fixed
class FocalLoss(tf.keras.losses.Loss):
def __init__(self,gamma=2.0,alpha=0.75,name = "focal_loss"):
self.gamma = gamma
self.alpha = alpha
def ```
call(self,y_true,y_pred):
bce = tf.losses.binary_crossentropy(y_true, y_pred)
p_t = (y_true * y_pred) + ((1 - y_true) * (1 - y_pred))
alpha_factor = y_true * self.alpha + (1 - y_true) * (1 - self.alpha)
modulating_factor = tf.pow(1.0 - p_t, self.gamma)
loss = tf.reduce_sum(alpha_factor * modulating_factor * bce,axis = -1 )
return loss
Если у вас есть вопросы по содержанию этой книги, пожалуйста, оставьте комментарий в нашем публичном аккаунте «Алгоритм и кулинария». Автор ответит на них, когда сможет.
Вы также можете оставить сообщение с ключевым словом присоединиться к группе в фоновом режиме публичного аккаунта, чтобы присоединиться к дискуссионной группе читателей.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )