Класс CategoricalFocalCrossentropy
Класс CategoricalFocalCrossentropy вычисляет
фокальную кроссэнтропию для задач категориальной
классификации. Он является модификацией обычной
категориальной кроссэнтропии и позволяет
сфокусировать обучение на сложных примерах,
уменьшая вклад простых. Первым параметром
передается коэффициент фокусировки gamma,
вторым - коэффициент сглаживания меток
label_smoothing. Также можно передать
веса классов alpha.
Синтаксис
tf.keras.losses.CategoricalFocalCrossentropy(
gamma=2.0,
alpha=0.25,
label_smoothing=0.0,
from_logits=False,
reduction='sum_over_batch_size'
)
Пример
Давайте вычислим фокальную кроссэнтропию для двух классов:
import tensorflow as tf
loss = tf.keras.losses.CategoricalFocalCrossentropy()
y_true = tf.constant([[1.0, 0.0], [0.0, 1.0]])
y_pred = tf.constant([[0.9, 0.1], [0.2, 0.8]])
res = loss(y_true, y_pred)
print(res)
Результат выполнения кода:
tf.Tensor(0.011031, shape=(), dtype=float32)
Пример
Давайте изменим параметр gamma и
посмотрим, как это повлияет на результат:
<+python+>
import tensorflow as tf
loss = tf.keras.losses.CategoricalFocalCrossentropy(gamma=1.0)
y_true = tf.constant([[1.0, 0.0], [0.0, 1.0]])
y_pred = tf.constant([[0.9, 0.1], [0.2, 0.8]])
res = loss(y_true, y_pred)
print(res)
<-python+>
Результат выполнения кода:
tf.Tensor(0.027603, shape=(), dtype=float32)
Пример
Давайте используем фокальную кроссэнтропию при компиляции модели:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, activation='softmax', input_shape=(5,))
])
model.compile(
optimizer='adam',
loss=tf.keras.losses.CategoricalFocalCrossentropy(),
metrics=['accuracy']
)
x = tf.random.normal((4, 5))
y = tf.constant([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0], [1.0, 0.0, 0.0]])
model.fit(x, y, epochs=1, verbose=0)
res = model.evaluate(x, y, verbose=0)
print(res)
Результат выполнения кода:
[0.15384616, 0.5]
Смотрите также
-
класс
CategoricalCrossentropy,
который вычисляет обычную категориальную кроссэнтропию -
класс
BinaryFocalCrossentropy,
который вычисляет бинарную фокальную кроссэнтропию -
класс
SparseCategoricalCrossentropy,
который вычисляет разреженную категориальную кроссэнтропию -
класс
KLDivergence,
который вычисляет дивергенцию Кульбака-Лейблера