1

我想知道张量流函数sparse_softmax_cross_entropy_with_logits 在数学上到底在做什么。但我找不到编码的来源。你能帮助我吗?

4

3 回答 3

1

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)。

于 2016-12-28T17:24:58.450 回答
0

实现中最重要的部分第 132 行开始。

该函子由内核实现调用。

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

于 2016-06-13T04:19:26.913 回答
-1

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

评论说:

测量类别互斥(每个条目恰好属于一个类别)的离散分类任务中的概率误差。例如,每张 CIFAR-10 图像都标有一个且只有一个标签:图像可以是狗或卡车,但不能同时是两者。

于 2016-06-12T20:40:44.850 回答