【问题标题】:Where is the origin coding of sparse_softmax_cross_entropy_with_logits function in tensorflowtensorflow中sparse_softmax_cross_entropy_with_logits函数的原点编码在哪里
【发布时间】:2016-10-13 00:52:27
【问题描述】:

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

【问题讨论】:

    标签: python tensorflow softmax cross-entropy


    【解决方案1】:

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

    评论说:

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

    【讨论】:

      【解决方案2】:

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

      此函子由kernel implementation 调用。

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

      【讨论】:

        【解决方案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 切片以检索目标的 log-probability。

        但是,它通过向某些操作添加小值来以数值稳定的方式(这里有几件事可能会出错)这样做。这意味着计算上述详细版本只会产生与 nn.sparse_softmax_cross_entropy_with_logits 大致相同的值(运行一些测试表明差异始终小于 2e-6)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 2020-05-24
          • 1970-01-01
          相关资源
          最近更新 更多