tenorflow softmax_cross_entropy код

Поскольку исходный код tf.nn.softmax_cross_entropy_with_logits в gen_nn_ops скрыт, может ли кто-нибудь объяснить мне, как тензорный поток вычисляет перекрестную энтропию после Softmax. Я имею в виду, что после softmax он может вывести 0 из-за точности, что приведет к проблеме NaN с перекрестной энтропией. Использовал ли тензорный поток метод клипа, когда softmax ограничивал его вывод?


person Nan    schedule 19.10.2017    source источник


Ответы (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