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()
,