BCELoss、BCEWithLogitsLoss / 二元交叉熵损失函数(Binary Cross Entropy Loss)

BCELoss 和 BCEWithLogitsLoss 都是用于二分类任务的损失函数,但它们在使用上有一些区别。 

BCELoss

input:经过 Sigmoid 函数激活后的预测概率 + 对应的真实标签(一般使用one-hot表示)

介绍

BCELoss:BCELoss 是二元交叉熵损失函数(Binary Cross Entropy Loss)的简写。它的输入是经过 Sigmoid 函数激活后的预测概率对应的真实标签(一般使用one-hot表示)。BCELoss 计算的是预测概率和真实标签之间的二元交叉熵损失,通过最小化该损失来优化模型。

比如我们一个样本y有3个类别,那么我们通过softmax得到 “ y^ = [ 0.2 , 0.5 , 0.3 ] ”一个一个样本的分类结果,这个结果的通俗解释就是:为第一类的概率为0.2,为第二类的概率为0.5,为第三类的结果过0.3。假设这个样本真实类别为第二类,那么我们希望模型输出的结果过应该是y = [ 0 , 1 , 0 ],这个就是标签值。就可以求损失函数了。

示例:

在图片多标签分类时,如果3张图片分3类,会输出一个3*3的矩阵(3张图片属于3种类别的概率,每一行代表一张图片,一行中的3个元素代表属于三种类别的概率)。

在这里插入图片描述

先用Sigmoid给这些值都搞到0~1之间:

在这里插入图片描述
假设Target是:

在这里插入图片描述

下面我们用BCELoss来验证一下Loss是不是0.7194!
在这里插入图片描述

BCEWithLogitsLoss

input:没有经过 Sigmoid 函数激活的预测概率 + 对应的真实标签(一般使用one-hot表示)

简介:

BCEWithLogitsLoss:BCEWithLogitsLoss 结合了 Sigmoid 函数和BCE交叉熵损失。它的输入是未经过 Sigmoid 函数转换的模型输出 logits 和对应的真实标签。BCEWithLogitsLoss 内部会在计算中自动应用 Sigmoid 函数,将 logits 转换为预测概率,然后计算二元交叉熵损失。BCEWithLogitsLoss 的优势在于BCEWithLogitsLoss就是把Sigmoid + BCELoss合成一步,更加高效。

示例:

我们直接用刚刚的input验证一下是不是0.7193:

在这里插入图片描述

举例说明(二分类为例)

import torch
import torch.nn as nn

# 假设我们有一些预测值和目标值
predicted = torch.FloatTensor([2, -1, 0, 5]) 
target = torch.FloatTensor([1, 0, 1, 0])

# 初始化BCEWithLogitsLoss
criterion = nn.BCEWithLogitsLoss()  

# 计算loss
loss = criterion(predicted, target)
print(loss)

# 反向传播计算梯度
loss.backward()

predicted = [2, -1, 0, 5]表示4个样本的预测logits值:

  • 2: 第一个样本被预测为正样本,logits值是2
  • -1: 第二个样本被预测为正样本,logits值是-1
  • 0: 第三个样本被预测为正样本,logits值是0
  • 5: 第四个样本被预测为正样本,logits值是5

备注:什么是logtis?深度学习logits是什么?_logits层_HealthScience的博客-CSDN博客

注意1:这里和交叉熵损失一样,需要先实例化才可以使用, 也就是说,需要:

# 初始化BCEWithLogitsLoss
criterion = nn.BCEWithLogitsLoss()  

# 计算loss
loss = criterion(predicted, target)

而不能直接:

loss = nn.BCEWithLogitsLoss(predicted, target)

注意2:输入的顺序是predict、true,不要搞反

而target = [1, 0, 1, 0] 表示第一个和第三个样本的真实标签为正样本1,第二和第四个样本的真实标签为负样本0

 Pytorch详解BCELoss和BCEWithLogitsLoss_豪哥的博客-CSDN博客_bceloss

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马鹏森

太谢谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值