张量流 softmax_cross_entropy 代码
tensorflow softmax_cross_entropy code
由于gen_nn_ops
中tf.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 使激活更像正态分布。
由于gen_nn_ops
中tf.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 使激活更像正态分布。