我想知道数学上的张量流函数sparse_softmax_cross_entropy_with_logits究竟在做什么。但我无法找到编码的起源。 你能救我吗?
答案 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图像都标有一个 并且只有一个标签:图像可以是狗或卡车,但不是两者。