如何解决为什么从 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_logits
是 False
,则 output
值被剪裁为 epsilon
和 1-epsilon
。
这意味着如果该值在此范围之外略微变化,则结果不会对其做出反应。
然而,据我所知,真正重要的情况是非常奇特的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。