Два класса в TensorFlow
Когда у объекта ровно два
исхода, метки задают числами
0 и 1, а сеть
выдаёт одно сырое значение
на объект. Ошибка двух
классов сопоставляет
такие метки с логитами;
класс BinaryCrossentropy
рассчитан на этот случай.
Сигмоид перед ошибкой не
ставят: при
создании объекта указывают
параметр from_logits
со значением истины. Создадим
ошибку, зададим метки и
логиты, выведем результат:
import tensorflow as tf
loss_fn = tf.keras.losses.BinaryCrossentropy(
from_logits=True
)
labels = tf.constant([0.0, 1.0, 1.0])
logits = tf.constant([-1.0, 2.0, 0.5])
print(loss_fn(labels, logits))
# выведет tf.Tensor(0.30475557, shape=(), dtype=float32)
Порядок аргументов прежний: сначала эталон, затем предсказание. На двух объектах ошибка считается так же:
import tensorflow as tf
loss_fn = tf.keras.losses.BinaryCrossentropy(
from_logits=True
)
labels = tf.constant([1.0, 0.0])
logits = tf.constant([0.8, -0.3])
print(loss_fn(labels, logits))
# выведет tf.Tensor(0.46272796, shape=(), dtype=float32)
Задайте метки [1.0, 0.0, 1.0]
и сырые выходы [2.0, -1.0, 0.0].
Выведите одно число - значение
ошибки по этим данным.
Создайте метки [0.0, 1.0]
и сырые выходы [-0.5, 1.5].
Выведите итоговую ошибку
одним числом.
Соберите метку [0.0]
и сырой выход [3.0] для
одного объекта. Выведите
одно число - ошибку для
этой пары.