import torch
from torch.nn import CrossEntropyLoss
criterion = CrossEntropyLoss()
output = torch.tensor([[0.2, 0.8]])
target = torch.tensor([1])
loss = criterion(output, target)
print(loss)
y = torch.exp(torch.tensor(0.8)) / ((torch.exp(torch.tensor(0.8)) + torch.exp(torch.tensor(0.2))))
print(-torch.log(y))
假设一个二分类模型输出是属于对应两个类别的logits,目标值是对应的类别真值。在计算交叉熵时,pytorch封装的CrossEntropyLoss类对象会先对logits进行softmax激活,然后再进行交叉熵计算。
也就是在上面demo中,不回直接计算-ln(0.8) = 0.2231
而是先计算 exp(o.8)/(exp(0.8)+exp(0.2)) = 0.645656, 在计算-log(0.645656) = 0.43748795048588573