BCELoss BCEWithLogitsLoss 多标签损失函数

BCELoss
在图片多标签分类时,如果3张图片分3类,会输出一个3*3的矩阵。

在这里插入图片描述
先用Sigmoid给这些值都搞到0~1之间:

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
emmm应该是我上面每次都保留4位小数,算到最后误差越来越大差了0.0001。不过也很厉害啦哈哈哈哈哈!
BCEWithLogitsLoss
BCEWithLogitsLoss就是把Sigmoid-BCELoss合成一步。我们直接用刚刚的input验证一下是不是0.7193:

20201230

对每一张图片 每一条记录
1.每一行对应每个标签的概率
2.对每一行的每个标签求交叉熵损失
3.对每一行的3个标签的交叉熵损失求平均
4.对所有图片 所有记录的平均交叉熵 再求平均
总的编码信息长度

input 输入还需要通过sigmoid 处理 只有 input输入值接近6 sigmoid 之后得到
1,再经过ln之后得到零 这样loss 才会接近于零

https://blog.youkuaiyun.com/mr_health/article/details/108665421
tf.nn.sigmoid_cross_entropy_with_logits BCEloss
https://www.cnblogs.com/hellcat/p/7039482.html
https://blog.youkuaiyun.com/qq_35203425/article/details/79773459?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control
tensorflow 对应这个
https://www.w3cschool.cn/tensorflow_python/tf_nn_sigmoid_cross_entropy_with_logits.html
https://www.cnblogs.com/smallredness/p/11199541.html

### BCELossBCEWithLogitsLoss 的区别 在 PyTorch 中,`BCELoss` 是二元交叉熵损失函数的一种实现形式。该函数用于衡量预测概率与真实标签之间的差异,适用于二分类问题[^1]。 对于 `BCELoss` 来说,输入应当是经过激活函数(通常是 Sigmoid 函数)处理后的值,即这些值已经被映射到 (0, 1) 范围内作为概率估计。这意味着如果直接传入未经变换的原始分数,则可能会导致数值不稳定或者不合理的梯度更新。 相比之下,`BCEWithLogitsLoss` 结合了 Sigmoid 层和二元交叉熵损失计算于一体。此设计不仅简化了模型构建过程中的操作链路,而且更重要的是,在内部实现了更稳定的数值运算方式来防止下溢或上溢现象的发生。 具体来说: - **稳定性**:由于集成了Sigmoid层,因此可以避免因单独应用Sigmoid而可能产生的极端值情况; - **效率提升**:减少了额外一层的操作开销; 下面是一个简单的例子展示如何使用这两种损失函数: ```python import torch import torch.nn as nn # 假设我们有如下数据 logits = torch.tensor([[-2.0], [1.0]], requires_grad=True) labels = torch.tensor([[0.0], [1.0]]) # 使用 BCEWithLogitsLoss loss_fn_with_logits = nn.BCEWithLogitsLoss() loss_with_logits = loss_fn_with_logits(logits, labels) print(f"BCEWithLogitsLoss: {loss_with_logits.item()}") sigmoid_output = torch.sigmoid(logits) # 使用 BCELoss 需要先通过 sigmoid 将 logits 映射到 (0, 1) 区间 loss_fn_without_logits = nn.BCELoss() loss_without_logits = loss_fn_without_logits(sigmoid_output, labels) print(f"BCELoss after applying sigmoid manually: {loss_without_logits.item()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值