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

Функция nn.softmax_cross_entropy_with_logits

Функция nn.softmax_cross_entropy_with_logits применяется для вычисления потерь кросс-энтропии между предсказанными логитами и истинными метками классов. Первым параметром передаются логиты (необработанные выходы нейронной сети), вторым - метки классов. Функция объединяет в себе операцию softmax и вычисление кросс-энтропии, что делает ее численно устойчивой и эффективной.

Логиты - это выходы последнего слоя нейронной сети до применения функции активации. Метки классов должны быть представлены в формате one-hot encoding или как вероятностное распределение.

Синтаксис

tf.nn.softmax_cross_entropy_with_logits(labels, logits, [name])

Пример

Давайте вычислим кросс-энтропию для простого случая с двумя классами. Создадим логиты и метки в формате one-hot encoding:

import tensorflow as tf # Logits for two samples and two classes logits = tf.constant([[2.0, 1.0], [1.0, 3.0]]) # One-hot encoded labels labels = tf.constant([[1.0, 0.0], [0.0, 1.0]]) # Compute softmax cross entropy loss = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits) print(loss)

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

tf.Tensor([0.31326166 0.12692805], shape=(2,), dtype=float32)

Пример

Давайте вычислим среднее значение потерь для батча:

import tensorflow as tf # Logits for three samples and three classes logits = tf.constant([[1.0, 2.0, 3.0], [3.0, 1.0, 2.0], [2.0, 3.0, 1.0]]) # One-hot encoded labels labels = tf.constant([[0.0, 0.0, 1.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) # Compute softmax cross entropy loss = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits) # Compute mean loss mean_loss = tf.reduce_mean(loss) print(loss) print(mean_loss)

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

tf.Tensor([0.40760595 0.40760595 0.40760595], shape=(3,), dtype=float32) tf.Tensor(0.40760595, shape=(), dtype=float32)

Пример

Давайте сравним результат с ручным вычислением через softmax и кросс-энтропию:

import tensorflow as tf # Logits and labels logits = tf.constant([[2.0, 1.0]]) labels = tf.constant([[1.0, 0.0]]) # Using softmax_cross_entropy_with_logits loss1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits) # Manual computation softmax_result = tf.nn.softmax(logits) loss2 = -tf.reduce_sum(labels * tf.math.log(softmax_result), axis=1) print(loss1) print(loss2)

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

tf.Tensor([0.31326166], shape=(1,), dtype=float32) tf.Tensor([0.3132617], shape=(1,), dtype=float32)

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

  • функцию softmax,
    которая вычисляет softmax для тензора
  • функцию sparse_softmax_cross_entropy_with_logits,
    которая вычисляет кросс-энтропию с разреженными метками
  • функцию sigmoid_cross_entropy_with_logits,
    которая вычисляет кросс-энтропию с сигмоидой
  • функцию log_softmax,
    которая вычисляет логарифмический softmax
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить