TensorFlow: мои логиты в правильном формате для функции кросс-энтропии?

Хорошо, так что я собираюсь запустить tf.nn.softmax_cross_entropy_with_logits() функция в Tensorflow.

Насколько я понимаю, "логиты" должны быть Тензор вероятностей, каждый из которых соответствует вероятности определенного пикселя, что он является частью изображения, которое в конечном итоге будет "собака" или "грузовик" или что-то... конечным количество вещей.

Эти логиты будут включены в это уравнение кросс-энтропии: Формула кросс-энтропии из Википедии

Насколько я понимаю, логиты включены в правую часть уравнения. То есть они являются q каждого x (изображение). Если бы они были вероятностями от 0 до 1... это имело бы смысл для меня. Но когда я запускаю свой код и получаю тензор логитов, я не получаю вероятности. Вместо этого я получаю как положительные, так и отрицательные числа:

-0.07264724 -0.15262917  0.06612295 ..., -0.03235611  0.08587133 0.01897052 0.04655019 -0.20552202  0.08725972 ..., -0.02107313 -0.00567073 0.03241089 0.06872301 -0.20756687  0.01094618 ...,   etc

Итак, мой вопрос... это правильно? Должен ли я как-то рассчитать все свои логиты и превратить их в вероятности от 0 до 1?

1 ответ

Решение

Важно отметить, что tf.nn.softmax_cross_entropy_with_logits(logits, labels) выполняет внутренний softmax на каждом ряду logits так что их можно интерпретировать как вероятности, прежде чем они будут поданы в уравнение кросс-энтропии.

Следовательно " logits "не должно быть вероятностей (или даже истинных логарифмических вероятностей, как следует из названия), из-за внутренней нормализации, которая происходит внутри этой операции.

Альтернативный способ написать:

xent = tf.nn.softmax_cross_entropy_with_logits(logits, labels)

...было бы:

softmax = tf.nn.softmax(xent)
xent = -tf.reduce_sum(labels * tf.log(softmax), 1)

Тем не менее, эта альтернатива будет (i) менее численно устойчивой (поскольку softmax может вычислять гораздо большие значения) и (ii) менее эффективной (так как в backprop будут выполняться некоторые избыточные вычисления). Для реальных целей, мы рекомендуем вам использовать tf.nn.softmax_cross_entropy_with_logits(),

Другие вопросы по тегам