【发布时间】:2016-10-13 00:52:27
【问题描述】:
我想知道张量流函数sparse_softmax_cross_entropy_with_logits 在数学上到底在做什么。但我找不到编码的来源。 你能帮帮我吗?
【问题讨论】:
标签: python tensorflow softmax cross-entropy
我想知道张量流函数sparse_softmax_cross_entropy_with_logits 在数学上到底在做什么。但我找不到编码的来源。 你能帮帮我吗?
【问题讨论】:
标签: python tensorflow softmax cross-entropy
在头部版本中(截至今天),您可以在 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py 第 424 行找到该函数。
评论说:
测量离散分类任务中的概率误差 哪些类是互斥的(每个条目都在 一节课)。例如,每个 CIFAR-10 图像都标有一个 并且只有一个标签:图像可以是狗或卡车,但不能同时是两者。
【讨论】:
实现中最重要的部分是here,从第 132 行开始。
此函子由kernel implementation 调用。
它使用了 Eigen 的一个没有很好记录的特性,称为生成器,它允许编写相当灵活的代码,并让它为 CPU 和由 nvcc 为 GPU 编译。
【讨论】:
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 切片以检索目标的 log-probability。
但是,它通过向某些操作添加小值来以数值稳定的方式(这里有几件事可能会出错)这样做。这意味着计算上述详细版本只会产生与 nn.sparse_softmax_cross_entropy_with_logits 大致相同的值(运行一些测试表明差异始终小于 2e-6)。
【讨论】: