二分类交叉熵损失函数(BCELoss)

PyTorch 中提供了 BCELoss 和 BCEWithLogitsLoss 两个用于计算二分类交叉熵损失的函数。两者的区别如下:

  1. BCELoss 要求输入的 logits 必须在 (0-1) 之间,所以需要先进行 sigmoid 计算,然后再计算每个标签对应的 logit 的负对数损失,并取均值;
  2. BCEWithLogitsLoss 和 BCELoss 计算过程一致,仅仅是把 sigmoid 计算添加了计算公式中,无需像 BCELoss 单独计算。

import torch
import torch.nn as nn

def test():

    # 二分类损失计算, 一个分数对应一个标签[0 或者 1]
    y_pred = torch.tensor([0.5, 0.3])
    y_true = torch.tensor([0.0, 1.0])

    # 2.1 BCELoss 使用
    # 注意: BCELoss 需要预测的分数在 (0, 1) 之间, 所以需要先 Sigmoid
    # 2.1.1 先对预测的分数使用 sigmoid 函数激活
    y_pred_sigmoid = nn.Sigmoid()(y_pred)
    # 2.1.2 对 sogmoid 结果计算多个样本平均损失
    loss = nn.BCELoss()(y_pred_sigmoid, y_true)
    print(loss)

    # 2.2 BCEWithLogitsLoss 使用
    # 注意: nn.BCEWithLogitsLoss 相当于 Simoid + BCELoss
    loss = nn.BCEWithLogitsLoss()(y_pred, y_true)
    print(loss)

if __name__ == '__main__':
    test()

程序输出结果:

tensor([0.7109, 0.5744])
tensor(0.8978)
tensor(0.8978)
未经允许不得转载:一亩三分地 » 二分类交叉熵损失函数(BCELoss)