微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么从 logits 计算损失在数值上更稳定?

如何解决为什么从 logits 计算损失在数值上更稳定?

在 TensorFlow 中,SparseCategoricalCrossentropy 的文档指出,使用 from_logits=True 并因此在最后一个模型层中排除 softmax 操作对于损失计算在数值上更稳定。

为什么会这样?

解决方法

首先 here 我认为一个很好的解释是你是否应该担心数值稳定性。检查这个答案,但一般来说你很可能不应该关心它。

回答您的问题“为什么会这样?”让我们来看看source code

def sparse_categorical_crossentropy(target,output,from_logits=False,axis=-1):
""" ...
"""
...

# Note: tf.nn.sparse_softmax_cross_entropy_with_logits
# expects logits,Keras expects probabilities.
if not from_logits:
    _epsilon = _to_tensor(epsilon(),output.dtype.base_dtype)
    output = tf.clip_by_value(output,_epsilon,1 - _epsilon)
    output = tf.log(output)
...

您可以看到,如果 from_logitsFalse,则 output 值被剪裁为 epsilon1-epsilon。 这意味着如果该值在此范围之外略微变化,则结果不会对其做出反应。

然而,据我所知,真正重要的情况是非常奇特的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。