torch.nn.BCELoss()
BCELoss — это бинарная кросс-энтропийная функция, официальный пример которой выглядит следующим образом:
Вход представляет собой тензор 1 × 3, представляющий вероятность, а кросс-энтропия рассчитывается вместе с целью с помощью функции активации Sigmoid.
#Official Example
m = nn.Sigmoid()
loss = nn.BCELoss()
input = torch.randn(3, requires_grad=True)
target = torch.empty(3).random_(2)
print("input:",input,"\n","target:",target)
output = loss(m(input), target)
print(output)
output.backward()
Функция, которую я реализовал сам, выглядит так:
def myBCE(predict,label):
#初始化loss为0
loss = 0
#m为样本数量,仅对一维tensor适用
m = predict.size(dim = 0)
#创建全1tensor
one = torch.ones(m)
#计算二元交叉熵损失(*tips:取相反数和除以样本数量)
loss = - torch.sum(label * torch.log(predict) + (one - label) * torch.log(one - predict)) / m
return loss
#My Implement
my_output = myBCE(m(input),target)
print(my_output)
Окончательные результаты расчета этих двух параметров следующие:
Видно, что BCELoss точно такой же.