Заметки Питорча

PyTorch
Заметки Питорча

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)

Окончательные результаты расчета этих двух параметров следующие:

image.pngВидно, что BCELoss точно такой же.