张量流中sparse_softmax_cross_entropy_with_logits函数的原始编码在哪里?

时间:2016-06-12 14:50:44

标签: python tensorflow softmax cross-entropy

我想知道数学上的张量流函数sparse_softmax_cross_entropy_with_logits究竟在做什么。但我无法找到编码的起源。 你能救我吗?

3 个答案:

答案 0 :(得分:0)

从第132行开始,实施的最重要部分是here

这个仿函数由kernel implementation调用。

它使用了一个非常好记录的Eigen称为生成器的特性,它允许编写相当灵活的代码,并为CPU和nvcc编译GPU。

答案 1 :(得分:0)

sparse_softmax_cross_entropy_with_logits相当于以下数字稳定版本:

-1. * tf.gather(tf.log(tf.nn.softmax(logits)), target)

或者,更“可读”的numpy-code:

-1. * np.log(softmax(logits))[target]

其中softmax(x) = np.exp(x)/np.sum(np.exp(x))

也就是说,它计算所提供的logits的softmax,获取其日志以检索日志概率,并对日志概率进行切片以检索目标的对数概率。

然而,它通过在一些操作中添加小值,以数字稳定的方式(这里可能出现一些问题)这样做。这意味着计算上述 - 详细 - 版本只会产生与nn.sparse_softmax_cross_entropy_with_logits相同的值(运行一些测试表明差异始终小于2e-6)。

答案 2 :(得分:-1)

在头版(截至今天)中,您可以在https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py第424行找到该功能。

评论说:

  

测量离散分类任务中的概率误差   哪些类是互斥的(每个条目都是完全相同的)   一节课)。例如,每个CIFAR-10图像都标有一个   并且只有一个标签:图像可以是狗或卡车,但不是两者。