我想知道张量流函数sparse_softmax_cross_entropy_with_logits 在数学上到底在做什么。但我找不到编码的来源。你能帮助我吗?
3 回答
sparse_softmax_cross_entropy_with_logits等价于以下数值稳定版本:
-1. * tf.gather(tf.log(tf.nn.softmax(logits)), target)
或者,在更“可读”的 numpy 代码中:
-1. * np.log(softmax(logits))[target]
哪里softmax(x) = np.exp(x)/np.sum(np.exp(x))
。
也就是说,它计算提供的 logits 的 softmax,取其 log 以检索 log-probabilities,并将 log-probabilities 切片以检索 target 的 log-probability。
但是,它通过向某些操作添加小值来以数值稳定的方式(这里可能会出现一些问题)这样做。这意味着计算上述 - 详细 - 版本只会产生大致相同的值nn.sparse_softmax_cross_entropy_with_logits
(运行一些测试表明差异始终小于 2e-6)。
在头部版本中(截至今天),您可以在https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py第 424 行中找到该函数。
评论说:
测量类别互斥(每个条目恰好属于一个类别)的离散分类任务中的概率误差。例如,每张 CIFAR-10 图像都标有一个且只有一个标签:图像可以是狗或卡车,但不能同时是两者。