【发布时间】:2021-01-21 02:27:57
【问题描述】:
我正在试验一些 pytorch 代码。通过交叉熵损失,我发现了一些有趣的结果,我同时使用了二元交叉熵损失和 pytorch 的交叉熵损失。
import torch
import torch.nn as nn
X = torch.tensor([[1,0],[1,0],[0,1],[0,1]],dtype=torch.float)
softmax = nn.Softmax(dim=1)
bce_loss = nn.BCELoss()
ce_loss= nn.CrossEntropyLoss()
pred = softmax(X)
bce_loss(X,X) # tensor(0.)
bce_loss(pred,X) # tensor(0.3133)
bce_loss(pred,pred) # tensor(0.5822)
ce_loss(X,torch.argmax(X,dim=1)) # tensor(0.3133)
我预计相同输入和输出的交叉熵损失为零。这里 X, pred 和 torch.argmax(X,dim=1) 是相同/相似的一些变换。这种推理仅适用于bce_loss(X,X) # tensor(0.),否则所有其他导致损失大于零。我推测bce_loss(pred,X)、bce_loss(pred,pred) 和ce_loss(X,torch.argmax(X,dim=1)) 的输出应该为零。
这里有什么错误?
【问题讨论】:
标签: deep-learning pytorch loss-function cross-entropy