【发布时间】:2019-09-19 20:17:43
【问题描述】:
查看 Sklearn 中的 logloss 和 Pytorch 中的 BCEloss 的文档,这些应该是相同的,即只是应用了权重的正常 log loss。但是,它们的行为不同 - 无论是否应用了权重。谁能给我解释一下?我找不到 BCEloss 的源代码(内部引用 binary_cross_entropy)。
input = torch.randn((3, 1), requires_grad=True)
target = torch.ones((3, 1), requires_grad=False)
w = torch.randn((3, 1), requires_grad=False)
# ----- With weights
w = F.sigmoid(w)
criterion_test = nn.BCELoss(weight=w)
print(criterion_test(input=F.sigmoid(input), target=F.sigmoid(target)))
print(log_loss(y_true=target.detach().numpy(),
y_pred=F.sigmoid(input).detach().numpy(), sample_weight=w.detach().numpy().reshape(-1), labels=np.array([0.,1.])))
print("")
print("")
# ----- Without weights
criterion_test = nn.BCELoss()
print(criterion_test(input=F.sigmoid(input),target=F.sigmoid(target)))
print(log_loss(y_true=target.detach().numpy(),
y_pred=F.sigmoid(input).detach().numpy(), labels=np.array([0.,1.])))
【问题讨论】:
-
@BramVanroy 它就在那里。参见criteria_test = nn.BCELoss(weight=w) 和logloss一样
标签: python scikit-learn pytorch loss-function cross-entropy