РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
402 of 824 menu

Класс 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:

<+python+> import tensorflow as tf tf.random.set_seed(0) model = tf.keras.Sequential([ tf.keras.layers.Dense(1, activation='sigmoid') ]) model.compile( optimizer='adam', loss=tf.keras.losses.BinaryFocalCrossentropy(gamma=2.0) ) x = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]]) y = tf.constant([0.0, 1.0, 0.0, 1.0]) model.fit(x, y, epochs=1, verbose=0) res = model.evaluate(x, y, verbose=0) print(res) <-python+>

Результат выполнения кода:

0.06583587825298309

Смотрите также

  • класс BinaryCrossentropy,
    который вычисляет обычную бинарную кроссэнтропию
  • класс CategoricalFocalCrossentropy,
    который вычисляет категориальную фокальную кроссэнтропию
  • класс CategoricalCrossentropy,
    который вычисляет категориальную кроссэнтропию
  • класс MeanSquaredError,
    который вычисляет среднеквадратичную ошибку
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить