Tensorflow Github源代码中的Softmax交叉熵实现



我正在尝试在python中实现Softmax交叉熵损失。所以,我在GitHub Tensorflow存储库中查看Softmax交叉熵损失的实现。我试图理解它,但我遇到了一个由三个函数组成的循环,我不明白函数中的哪行代码在计算损失?

函数softmax_cross_entropy_with_logits_v2(labels, logits, axis=-1, name=None)返回函数softmax_cross_entropy_with_logits_v2_helper(labels=labels, logits=logits, axis=axis, name=name),后者又返回softmax_cross_entropy_with_logits(precise_logits, labels, name=name)

现在函数softmax_cross_entropy_with_logits(precise_logits, labels, name=name)返回函数softmax_cross_entropy_with_logits_v2(labels, logits, axis=-1, name=None)

这让我陷入了函数的循环中,却不知道计算Softmax函数的cost的代码在哪里。有人能指出Softmax Cross Entropy的代码在Tensorflow GitHub Repository中的实现位置吗?

我引用的GitHub存储库的链接在这里。它包含了以上三个函数的定义。

如果cost的代码需要很多难以理解的函数,你能解释一下代码行吗?谢谢

当您遵循此函数的调用堆栈时,您最终会发现:

cost, unused_backprop = gen_nn_ops.softmax_cross_entropy_with_logits(
precise_logits, labels, name=name)

每当您看到对gen_模块的引用时,就意味着它是C++代码上自动生成的python包装器——这就是为什么您无法通过简单地查找函数和下面的调用堆栈来找到它。

C++源代码可以在这里找到。

gen_nn_ops是如何创建的,在这个答案中有很好的描述。

最新更新