Pytorch札记

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)
复制代码

最终两者的计算结果如下所示:

image.png 可以看到BCELoss完全一样。

猜你喜欢

转载自juejin.im/post/7023285412995006495