我试图了解如何在 PyTorch 中计算二进制交叉熵。我在这里尝试了 PyTorch 文档中的相同代码,但与此函数的数学实现相比,我得到了不同的结果。
代码(与文档相比,我做了一些小改动):
import torch
import torch.nn as nn
m = nn.Sigmoid()
loss = nn.BCELoss()
input = torch.randn(1, requires_grad=True)
print(input)
print(m(input))
target = torch.empty(1).random_(2)
print(target)
output = loss(m(input), target)
print(output)
output.backward()
print(output)
BCELoss 的数学公式是:
output = -[target*log(our_value) + (1-target)*log(1-our_value)]
从上面的数学公式中,我应该得到 'output'=0.3215,'our_value'=0.4770 和 'target'=1。但是 PyTorch 显示“输出”=0.7403。
我还在这里找到了此函数的 C 代码,但公式几乎相同(只应添加非常小的 epsila,并且输出没有差异)。所以,对我来说仍然不清楚。
它是怎么来的?欢迎任何提示。