🤔 Какие есть усовершенствования бинарной кросс-энтропии?



Улучшения бинарной кросс-энтропии включают Focal Loss для фокусировки на сложных примерах, Weighted Binary Cross-Entropy для учета дисбаланса классов, и Label Smoothing для сглаживания меток, что помогает модели обобщать и снижает переобучение.



🟠Focal Loss

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

import tensorflow as tf



def focal_loss(gamma=2., alpha=0.25):

def focal_loss_fixed(y_true, y_pred):

y_true = tf.cast(y_true, tf.float32)

alpha_t = y_true * alpha + (tf.ones_like(y_true) - y_true) * (1 - alpha)

p_t = y_true * y_pred + (tf.ones_like(y_true) - y_true) * (tf.ones_like(y_pred) - y_pred)

fl = - alpha_t * tf.pow((tf.ones_like(y_true) - p_t), gamma) * tf.math.log(p_t)

return tf.reduce_mean(fl)

return focal_loss_fixed




🟠Weighted Binary Cross-Entropy

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

import tensorflow as tf



def weighted_binary_crossentropy(y_true, y_pred, beta=1.0):

y_true = tf.cast(y_true, tf.float32)

epsilon = tf.keras.backend.epsilon()

y_pred = tf.clip_by_value(y_pred, epsilon, 1. - epsilon)

return -beta * y_true * tf.math.log(y_pred) - (1 - beta) * (1 - y_true) * tf.math.log(1 - y_pred)




🟠Hinge Loss

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

import tensorflow as tf



def hinge_loss(y_true, y_pred):

y_true = tf.cast(y_true, tf.float32)

y_true = 2 * y_true - 1 # Преобразуем метки 0/1 в -1/1

return tf.reduce_mean(tf.maximum(0., 1. - y_true * y_pred))




🟠Dice Loss

Особенно полезна для задач сегментации, так как она измеряет сходство между предсказанным и истинным набором данных. Это усовершенствование бинарной кросс-энтропии учитывает пересечение и объединение предсказанных и истинных классов.

import tensorflow as tf



def dice_loss(y_true, y_pred, smooth=1):

y_true = tf.cast(y_true, tf.float32)

y_pred = tf.cast(y_pred, tf.float32)

intersection = tf.reduce_sum(y_true * y_pred)

return 1 - (2. * intersection + smooth) / (tf.reduce_sum(y_true) + tf.reduce_sum(y_pred) + smooth)




Ставь 👍 и забирай 📚 Базу знаний