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