torch.nn.BCELoss()
BCELoss为二元交叉熵函数,官方给出的例子如下所示:
输入为1×3的表示概率的tensor,经过激活函数Sigmoid,与target一同计算交叉熵。
#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完全一样。