РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
393 of 824 menu

Класс SparseCategoricalCrossentropy

Класс SparseCategoricalCrossentropy вычисляет разреженную категориальную кросс-энтропию между истинными метками и предсказаниями модели. В отличие от CategoricalCrossentropy, здесь истинные метки передаются не в виде one-hot векторов, а в виде целых чисел - индексов классов. Это удобно при большом числе классов, так как не требует раздувать метки. Первым параметром передается значение сглаживания меток from_logits - нужно ли применять активацию softmax к предсказаниям. Также можно указать reduction - способ агрегации значений функции потерь.

Синтаксис

tf.keras.losses.SparseCategoricalCrossentropy( from_logits=False, reduction='auto', name='sparse_categorical_crossentropy' )

Пример

Давайте вычислим разреженную категориальную кросс-энтропию для трех примеров и трех классов. Истинные метки передадим как целые числа:

import tensorflow as tf loss = tf.keras.losses.SparseCategoricalCrossentropy() y_true = tf.constant([0, 1, 2]) y_pred = tf.constant([ [0.9, 0.05, 0.05], [0.05, 0.9, 0.05], [0.05, 0.05, 0.9] ]) res = loss(y_true, y_pred) print(res)

Результат выполнения кода:

tf.Tensor(0.105360545, shape=(), dtype=float32)

Пример

Если модель возвращает логиты без активации softmax, нужно указать from_logits=True:

import tensorflow as tf loss = tf.keras.losses.SparseCategoricalCrossentropy( from_logits=True ) y_true = tf.constant([0, 1, 2]) y_pred = tf.constant([ [2.0, 1.0, 0.1], [0.1, 2.0, 1.0], [1.0, 0.1, 2.0] ]) res = loss(y_true, y_pred) print(res)

Результат выполнения кода:

tf.Tensor(0.41703033, shape=(), dtype=float32)

Пример

Класс можно использовать внутри модели через compile. Создадим простую модель и обучим ее на разреженных метках:

import tensorflow as tf import numpy as np tf.random.set_seed(0) model = tf.keras.Sequential([ tf.keras.layers.Dense(3, activation='softmax') ]) model.compile( optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy() ) x = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) y = np.array([0, 1, 2]) model.fit(x, y, epochs=1, verbose=0) res = model.evaluate(x, y, verbose=0) print(res)

Результат выполнения кода:

1.0986123085021973

Смотрите также

  • класс CategoricalCrossentropy,
    который вычисляет кросс-энтропию для one-hot меток
  • класс SparseCategoricalAccuracy,
    который вычисляет точность для разреженных меток
  • класс BinaryCrossentropy,
    который вычисляет бинарную кросс-энтропию
  • класс KLDivergence,
    который вычисляет дивергенцию Кульбака-Лейблера
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить