【损失函数】(五) BCELoss原理 & pytorch代码解析

本文介绍了BCELoss作为CrossEntropyLoss在二分类任务中的简化形式,包括其计算公式、网络输出要求和PyTorch实现。特别提到权重调整以处理标签不平衡问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.简介

我们了解完CrossEntropyLoss之后,BCELoss就十分好理解了,它全称为Binary Cross Entropy Loss,顾名思义就是CrossEntropyLoss的特殊二分类情况。


2.BCELoss

BCELoss的计算公式如下:

loss(x,y)=L=\left \{ l_{1,...,l_{N}} \right \}^{T},

l_{n}=-w_{n}[y_{n}\cdot logx_{n}+(1-y_{n})\cdot log(1-x_{n}))]

其中w_{y_{n}}是每个类别的权重,默认的全为1,x_{n}表示该类输出的概率,y_{n}表示该类的真值。

实际上就是把多分类特殊化为二分类,公式与交叉熵公式相同。


3.思考

这里需要注意的是,公式里并不包含Softmax,这意味着网络的输出只有一个维度,表示预测的概率。因此网络最后一层需要加上Sigmoid函数来保证输出在0-1之间。


4.pytorch代码

以下代码为pytorch官方BCELoss代码,可以看到里面有几个参数,我们大多数情况下使用默认参数设置就好。

torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')

其中:

  • weight表示每个类别的权重,当标签不平衡的时候可以使用来防止过拟合。
  • size_average表示是否将样本的loss进行平均之后输出,默认为true。
  • reduce表示是否将输出进行压缩,默认为true。当它为false的时候就会无视size_average。
  • reduction表示用怎么的方法进行reduce。可以设置为'none','mean','sum'。
import torch
import torch.nn as nn

a = torch.randn(3)
b = torch.Tensor([0, 1, 0])

criterion = nn.BCELoss()
c = criterion(torch.sigmoid(a), b)
print(c)


业务合作/学习交流+v:lizhiTechnology

 如果想要了解更多损失函数相关知识,可以参考我的专栏和其他相关文章:

损失函数_Lcm_Tech的博客-CSDN博客

【损失函数】(一) L1Loss原理 & pytorch代码解析_l1 loss-CSDN博客

【损失函数】(二) L2Loss原理 & pytorch代码解析_l2 loss-CSDN博客

【损失函数】(三) NLLLoss原理 & pytorch代码解析_nll_loss-CSDN博客

【损失函数】(四) CrossEntropyLoss原理 & pytorch代码解析_crossentropyloss 权重-CSDN博客

【损失函数】(五) BCELoss原理 & pytorch代码解析_bce损失函数源码解析-CSDN博客

如果想要了解更多深度学习相关知识,可以参考我的其他文章:

深度学习_Lcm_Tech的博客-CSDN博客

【优化器】(一) SGD原理 & pytorch代码解析_sgd优化器-CSDN博客

【图像生成】(一) DNN 原理 & pytorch代码实例_pytorch dnn代码-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值