В TensorFlow вы можете напрямую вызывать tf.nn.sigmoid_cross_entropy_with_logits
, который работает как в TensorFlow 1.x, так и в 2.0.
Если вы хотите придерживаться Keras API, используйте tf.losses.BinaryCrossentropy
и установите from_logits=True
в вызове конструктора.
В отличие от PyTorch, в API нет явных весов для каждого примера.Вместо этого вы можете установить reduction=tf.keras.losses.Reduction.NONE
для потери, выполнить взвешивание с помощью явного умножения и уменьшить потери, используя tf.reduce_mean
.
xent = tf.losses.BinaryCrossEntropy(
from_logits=True,
reduction=tf.keras.losses.Reduction.NONE)
loss = tf.reduce_mean(xent(targets, pred) * weights))