张量流 softmax_cross_entropy 代码

tensorflow softmax_cross_entropy code

由于gen_nn_opstf.nn.softmax_cross_entropy_with_logits的源代码被隐藏了,谁能给我解释一下tensorflow是如何计算Softmax之后的交叉熵的。我的意思是,在 softmax 之后它可能会输出 0,因为精度会导致交叉熵的 NaN 问题。 tensorflow 在 softmax 绑定它的输出时是否使用了 clip 方法?

tf.nn.softmax_cross_entropy_with_logits 的实现进一步转到本机 C++ 代码,here 是 XLA 实现。 Logits 不受约束,当其中一个 logits 比其他 logits 大得多时, 0 是可能的。示例:

>>> session.run(tf.nn.softmax([10.0, 50.0, 100.0, 200.0]))
array([ 0.,  0.,  0.,  1.], dtype=float32)

如果你愿意,你可以在 softmax 之前剪掉 logits,但不推荐这样做,因为当输出很大时它会杀死梯度。更好的选择是使用 batch normalization 使激活更像正态分布。