Класс BinaryFocalCrossentropy
Класс BinaryFocalCrossentropy применяется для вычисления
функции потерь между истинными метками и предсказаниями модели
в задачах бинарной классификации. Он является модификацией
обычной бинарной кроссэнтропии и позволяет сместить фокус
обучения на сложные примеры за счёт параметра gamma.
Первым параметром передаётся значение gamma, которое
управляет степенью фокусировки. Вторым параметром можно
передать alpha для балансировки классов. Третьим
параметром идёт from_logits, указывающий, являются ли
входные значения логитами. Также доступны параметры
reduction и name.
Синтаксис
tf.keras.losses.BinaryFocalCrossentropy(
gamma=2.0,
alpha=0.25,
from_logits=False,
reduction='sum_over_batch_size',
name='binary_focal_crossentropy'
)
Пример
Давайте создадим объект класса и вычислим потери между истинными метками и предсказаниями:
import tensorflow as tf
y_true = tf.constant([0, 1, 0, 1])
y_pred = tf.constant([0.1, 0.9, 0.2, 0.8])
bce = tf.keras.losses.BinaryFocalCrossentropy()
res = bce(y_true, y_pred)
print(res)
Результат выполнения кода:
tf.Tensor(0.008540476, shape=(), dtype=float32)
Пример
Давайте изменим параметр gamma и посмотрим, как
изменится значение потерь:
import tensorflow as tf
y_true = tf.constant([0, 1, 0, 1])
y_pred = tf.constant([0.1, 0.9, 0.2, 0.8])
bce = tf.keras.losses.BinaryFocalCrossentropy(gamma=5.0)
res = bce(y_true, y_pred)
print(res)
Результат выполнения кода:
tf.Tensor(1.0795015e-05, shape=(), dtype=float32)
Пример
Давайте передадим параметр from_logits=True, если
модель возвращает логиты, а не вероятности:
import tensorflow as tf
y_true = tf.constant([0, 1, 0, 1])
y_pred = tf.constant([-2.0, 2.0, -1.0, 1.5])
bce = tf.keras.losses.BinaryFocalCrossentropy(from_logits=True)
res = bce(y_true, y_pred)
print(res)
Результат выполнения кода:
tf.Tensor(0.028838238, shape=(), dtype=float32)
Пример
Давайте используем параметр alpha для балансировки
классов при сильном дисбалансе:
import tensorflow as tf
y_true = tf.constant([0, 0, 0, 1])
y_pred = tf.constant([0.1, 0.2, 0.15, 0.85])
bce = tf.keras.losses.BinaryFocalCrossentropy(alpha=0.75)
res = bce(y_true, y_pred)
print(res)
Результат выполнения кода:
tf.Tensor(0.0028691352, shape=(), dtype=float32)
Пример
Давайте применим класс внутри модели с помощью метода
compile:
Результат выполнения кода:
0.06583587825298309
Смотрите также
-
класс
BinaryCrossentropy,
который вычисляет обычную бинарную кроссэнтропию -
класс
CategoricalFocalCrossentropy,
который вычисляет категориальную фокальную кроссэнтропию -
класс
CategoricalCrossentropy,
который вычисляет категориальную кроссэнтропию -
класс
MeanSquaredError,
который вычисляет среднеквадратичную ошибку