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?
这是因为您给交叉熵函数的输入不是像您那样的概率,而是使用以下公式将 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)