Поскольку исходный код tf.nn.softmax_cross_entropy_with_logits
в gen_nn_ops
скрыт, может ли кто-нибудь объяснить мне, как тензорный поток вычисляет перекрестную энтропию после Softmax. Я имею в виду, что после softmax он может вывести 0 из-за точности, что приведет к проблеме NaN с перекрестной энтропией. Использовал ли тензорный поток метод клипа, когда softmax ограничивал его вывод?
tenorflow softmax_cross_entropy код
Ответы (1)
Реализация tf.nn.softmax_cross_entropy_with_logits
далее идет на собственный код C ++, здесь - реализация XLA. Логиты не привязаны, и 0
возможно, когда один из логитов намного больше других. Пример:
>>> session.run(tf.nn.softmax([10.0, 50.0, 100.0, 200.0]))
array([ 0., 0., 0., 1.], dtype=float32)
Если хотите, вы можете обрезать логиты непосредственно перед softmax, но это не рекомендуется, потому что это убивает градиент, когда вывод большой. Лучше использовать пакетная нормализация, чтобы активации были больше похожи на обычные.
person
Maxim
schedule
31.10.2017