快速理解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)