本人github

BCE 是二元交叉熵(Binary Cross Entropy)的简称,是一种常用的损失函数,主要用于二分类任务。BCE 损失函数衡量的是模型预测的概率分布与真实标签之间的差异。二元交叉熵损失函数在深度学习中被广泛用于分类任务,如目标检测中的目标置信度预测。

二元交叉熵(Binary Cross Entropy)损失函数

BCE 损失函数的公式如下:

[ \text{BCE}(p, y) = -\left[y \log§ + (1 - y) \log(1 - p)\right] ]

其中:

  • ( p ) 是模型预测的概率(取值范围为 0 到 1)。
  • ( y ) 是真实标签(0 或 1)。

损失函数解释

  • 当真实标签 ( y ) 为 1 时,损失函数变为 (-\log§)。这意味着如果模型预测的概率 ( p ) 越接近 1,损失就越小;如果预测的概率 ( p ) 越接近 0,损失就越大。
  • 当真实标签 ( y ) 为 0 时,损失函数变为 (-\log(1 - p))。这意味着如果模型预测的概率 ( p ) 越接近 0,损失就越小;如果预测的概率 ( p ) 越接近 1,损失就越大。

在 PyTorch 中实现 BCE 损失

PyTorch 提供了 torch.nn.BCELosstorch.nn.BCEWithLogitsLoss 两种方式来实现二元交叉熵损失函数:

  1. BCELoss
    直接使用模型的输出作为概率,需要手动对模型输出进行激活处理(如 Sigmoid)。

  2. BCEWithLogitsLoss
    结合了 Sigmoid 激活函数和 BCE 损失函数,适用于模型输出未经过 Sigmoid 激活的情况,更加稳定和高效。

使用示例

以下是使用 BCEWithLogitsLoss 计算目标置信度损失的示例代码:

import torch
import torch.nn as nn

# 创建二元交叉熵损失函数,包含 Sigmoid 激活
bce_loss = nn.BCEWithLogitsLoss()

# 假设有一个批次的预测值和真实标签
# 预测值 (logits),未经过 Sigmoid 激活
pred = torch.tensor([0.5, -1.0, 2.0], requires_grad=True)

# 真实标签 (targets)
target = torch.tensor([1.0, 0.0, 1.0])

# 计算损失
loss = bce_loss(pred, target)

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

print(f"Binary Cross Entropy Loss: {loss.item()}")

解释

  • 创建损失函数nn.BCEWithLogitsLoss 结合了 Sigmoid 激活和二元交叉熵损失。
  • 预测值和真实标签:示例中有三个预测值和对应的真实标签。
  • 计算损失:调用 bce_loss(pred, target) 计算损失值。
  • 反向传播:调用 loss.backward() 计算梯度,用于优化模型。

适用场景

BCE 损失函数广泛应用于二分类任务和多标签分类任务。在目标检测中,它常用于预测框是否包含目标物体的置信度(objectness score)。

总结

BCE(二元交叉熵)是深度学习中常用的损失函数之一,适用于二分类和多标签分类任务。BCEWithLogitsLoss 结合了 Sigmoid 激活函数,提供了更加稳定和高效的计算方式,适用于未经过激活处理的模型输出。通过计算预测概率与真实标签之间的差异,BCE 损失函数帮助模型更好地学习分类任务。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐