无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

快速理解binary cross entropy 二元交叉熵 – 二元交叉熵损失函数 全网首发(图文详解1)

前沿技术 Micheal 6个月前 (06-28) 198次浏览 已收录 扫描二维码

快速理解binary cross entropy 二元交叉熵

二元交叉熵(Binary Cross-Entropy,BCE)是机器学习中常用的一种损失函数,特别是在处理二分类问题时。它衡量的是模型预测的概率分布与真实标签的概率分布之间的差异。在二分类问题中,我们通常将标签编码为0(负类)或1(正类),而模型需要输出一个介于0和1之间的预测概率。

二元交叉熵的计算公式如下:
$$ BCE = -\frac{1}{N} \sum_{i=1}^{N} [y_i \cdot \log(p_i) + (1 – y_i) \cdot \log(1 – p_i)] $$

其中:

  • ( N ) 是样本的总数。
  • ( y_i ) 是第 ( i ) 个样本的真实标签。
  • ( p_i ) 是模型预测第 ( i ) 个样本为正类的概率。
  • ( \log ) 是自然对数。

在实际应用中,如果我们使用的是深度学习框架,比如TensorFlow或PyTorch,这些框架已经内置了二元交叉熵损失函数的实现。下面是一个简单的示例,展示如何在PyTorch中使用二元交叉熵损失函数。

import torch
import torch.nn as nn
import torch.optim as optim

# 假设我们有一些预测值和真实值
predictions = torch.tensor([0.3, 0.7, 0.2], dtype=torch.float32)  # 模型输出的预测概率
targets = torch.tensor([0, 1, 0], dtype=torch.float32)  # 真实的标签

# 创建二元交叉熵损失函数的实例
criterion = nn.BCELoss()

# 计算损失
loss = criterion(predictions, targets)

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

# 假设我们还有一个简单的模型
model = nn.Sequential(
    nn.Linear(10, 1),  # 假设输入特征是10维的
    nn.Sigmoid()       # 输出层使用Sigmoid激活函数将输出压缩到0和1之间
)

# 优化器
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 假设我们有一些输入数据和标签
inputs = torch.randn(32, 10)  # 32个样本,每个样本10个特征
labels = torch.randint(0, 2, (32,)).float()  # 32个二分类标签

# 清空梯度
optimizer.zero_grad()

# 前向传播
outputs = model(inputs).squeeze()  # 确保输出的shape和labels的shape一致
outputs = torch.sigmoid(outputs)  # 确保输出值在0和1之间

# 计算损失
loss = criterion(outputs, labels)

# 反向传播
loss.backward()

# 更新权重
optimizer.step()

print(f"Updated Loss: {loss.item()}")

在上面的代码中,我们首先定义了一个简单的模型,它接受10维的输入并输出一个预测概率。然后我们使用SGD优化器来更新模型的权重。我们计算了模型输出和真实标签之间的二元交叉熵损失,并通过反向传播来更新模型的权重。

请注意,实际开发中需要根据具体问题调整模型结构、优化器、学习率等超参数。此外,通常会在更多的数据上进行多个epoch的训练,并在训练过程中添加验证步骤来监控模型的泛化能力。
(user agent stylesheet) 小程序去掉user agent stylesheet – 去掉User Agent Stylesheet的小程序解决方案 全网首发(图文详解1)
(adb list of devices attached) ADB连接手机遇到的问题:list of devices attached – ADB连接设备问题解决步骤 全网首发(图文详解1)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝