【发布时间】:2021-05-28 01:46:19
【问题描述】:
我正在尝试使用 pytorch 的 BCELoss 函数来计算交叉熵损失,以解决二进制分类问题。在修补时,我发现了这种奇怪的行为。
from torch import nn
sigmoid = nn.Sigmoid()
loss = nn.BCELoss(reduction="sum")
target = torch.tensor([0., 1.])
input1 = torch.tensor([1., 1.], requires_grad=True)
input2 = sigmoid(torch.tensor([10., 10.], requires_grad=True))
print(input2) #tensor([1.0000, 1.0000], grad_fn=<SigmoidBackward>)
print(loss(input1, target)) #tensor(100., grad_fn=<BinaryCrossEntropyBackward>)
print(loss(input2, target)) #tensor(9.9996, grad_fn=<BinaryCrossEntropyBackward>)
既然 input1 和 input2 有相同的值,它不应该返回相同的损失值而不是 100 和 9.9996。正确的损失值应该是 100,因为我将 log(0) ~-infinity 相乘,它在 pytorch 中的上限为 -100。 https://pytorch.org/docs/stable/generated/torch.nn.BCELoss.html
这里发生了什么,我哪里出错了?
【问题讨论】:
标签: python python-3.x deep-learning pytorch