Функция nn.weighted_cross_entropy_with_logits
Функция nn.weighted_cross_entropy_with_logits вычисляет
сигмоидную кросс-энтропию между логитами и целевыми метками,
но, в отличие от обычной версии, позволяет задавать вес
для положительного класса. Это полезно при работе с
несбалансированными наборами данных, когда один класс
встречается значительно чаще другого. Первым параметром
передаются метки, вторым - логиты, третьим - вес
положительного класса. Дополнительно можно указать
параметр pos_weight в виде тензора для
поэлементного взвешивания.
Синтаксис
tf.nn.weighted_cross_entropy_with_logits(
labels, logits, pos_weight, name=None
)
Пример
Давайте вычислим взвешенную кросс-энтропию для простого набора меток и логитов:
import tensorflow as tf
labels = tf.constant([1.0, 0.0, 1.0, 0.0])
logits = tf.constant([2.0, -1.0, 0.5, 3.0])
pos_weight = tf.constant(2.0)
res = tf.nn.weighted_cross_entropy_with_logits(
labels=labels,
logits=logits,
pos_weight=pos_weight
)
print(res)
Результат выполнения кода:
tf.Tensor([0.2532842 1.3132616 0.94703287 6.0067153 ], shape=(4,), dtype=float32)
Пример
Давайте передадим pos_weight как тензор
для поэлементного взвешивания каждого примера:
import tensorflow as tf
labels = tf.constant([1.0, 0.0, 1.0, 0.0])
logits = tf.constant([2.0, -1.0, 0.5, 3.0])
pos_weight = tf.constant([1.0, 2.0, 3.0, 4.0])
res = tf.nn.weighted_cross_entropy_with_logits(
labels=labels,
logits=logits,
pos_weight=pos_weight
)
print(res)
Результат выполнения кода:
tf.Tensor([0.1266421 2.626523 2.8410988 3.0043576 ], shape=(4,), dtype=float32)
Пример
Давайте уменьшим значение результата с помощью
функции reduce_mean, чтобы получить
скалярное значение потерь:
import tensorflow as tf
labels = tf.constant([1.0, 0.0, 1.0, 0.0])
logits = tf.constant([2.0, -1.0, 0.5, 3.0])
pos_weight = tf.constant(2.0)
res = tf.nn.weighted_cross_entropy_with_logits(
labels=labels,
logits=logits,
pos_weight=pos_weight
)
loss = tf.reduce_mean(res)
print(loss)
Результат выполнения кода:
tf.Tensor(2.1300733, shape=(), dtype=float32)
Смотрите также
-
функцию
sigmoid_cross_entropy_with_logits,
которая вычисляет сигмоидную кросс-энтропию без весов -
функцию
softmax_cross_entropy_with_logits,
которая вычисляет кросс-энтропию с softmax для многоклассовой классификации -
функцию
sparse_softmax_cross_entropy_with_logits,
которая вычисляет кросс-энтропию с целочисленными метками -
функцию
softmax,
которая преобразует логиты в вероятности