尝试理解 PyTorch 中的 cross_entropy 损失

Jar*_*rym 7 python machine-learning pytorch

这是一个非常新手的问题,但我试图解决 Torch 中的 cross_entropy 损失问题,所以我创建了以下代码:

x = torch.FloatTensor([
                        [1.,0.,0.]
                       ,[0.,1.,0.]
                       ,[0.,0.,1.]
                       ])

print(x.argmax(dim=1))

y = torch.LongTensor([0,1,2])
loss = torch.nn.functional.cross_entropy(x, y)

print(loss)
Run Code Online (Sandbox Code Playgroud)

输出以下内容:

tensor([0, 1, 2])
tensor(0.5514)
Run Code Online (Sandbox Code Playgroud)

我不明白的是,鉴于我的输入与预期输出匹配,为什么损失不为 0?

Rob*_*ole 4

这是因为您给交叉熵函数的输入不是像您那样的概率,而是使用以下公式将 logits 转换为概率:

probas = np.exp(logits)/np.sum(np.exp(logits), axis=1)
Run Code Online (Sandbox Code Playgroud)

所以这里 pytorch 将在您的情况下使用的概率矩阵是:

[0.5761168847658291,  0.21194155761708547,  0.21194155761708547]
[0.21194155761708547, 0.5761168847658291, 0.21194155761708547]
[0.21194155761708547,  0.21194155761708547, 0.5761168847658291]
Run Code Online (Sandbox Code Playgroud)