Я понимаю, что вывод - это вероятности классов из слоя softmax.Это правильно?
Это может быть либо выход из слоя softmax, либо необработанные logits (входные данные для слоя softmax).Выходным вектором слоя softmax являются вероятности каждого класса.Если output
является выходом softmax, тогда установите from_logits=False
.Если output
- логиты, то вы хотите установить from_logits=True
.Внутри вы можете видеть, что вызывается tf.nn.softmax_cross_entropy_with_logits
, который вычисляет вероятности softmax и функцию перекрестной энтропии одновременно.Их совместное вычисление учитывает некоторые математические приемы для числовой устойчивости.
Какая цель?
Цель - это горячий вектор.Это означает, что число n
представлено вектором v
, где v[n] = 1
и 0
повсюду.Здесь n
- класс метки.В TensoFlow есть функция для получения этой кодировки, которая называется tf.one_hot
.Например, tf.one_hot([3],5)
приведет к вектору [0, 0, 1, 0, 0]
.
И как в этом коде отображаются "1 / N", "Σ", "pi, j"?
Приведенный выше код не усредняется по всем входам (нет необходимости в «1 / N»).Например, если вход имеет форму [10, 5]
, выход будет иметь форму [10]
.Вам нужно будет позвонить tf.reduce_mean
на результат.Таким образом, уравнение по существу:

Вышеупомянутое уравнение реализовано в строке
return - tf.reduce_sum(target * tf.log(output),
reduction_indices=len(output.get_shape()) - 1)
"Σ" равно tf.reduce_sum
.«pi, j» равно output
, индикаторная функция (то есть, выделенная жирным шрифтом 1) имеет горячее кодированное значение target
.
Side Note
Вы должны использовать tf.softmax_cross_entropy_with_logits_v2
, поскольку код, который вы указали (при настройке from_logits=False
), может привести к числовым ошибкам.Объединенная функция решает все эти числовые проблемы.