交叉熵损失函数读入
时间: 2025-05-13 13:47:08 浏览: 26
### 交叉熵损失函数的用法与实现
#### 背景介绍
交叉熵损失函数是一种广泛应用于分类任务中的损失函数,尤其适合多分类问题。其核心思想在于衡量模型预测的概率分布与真实标签之间的差异程度[^1]。
#### 数学定义
交叉熵损失函数的一般形式如下所示:
\[ L = -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{C} y_{ij} \log(p_{ij}) \]
其中:
- \( N \) 表示样本数量;
- \( C \) 表示类别总数;
- \( y_{ij} \) 是第 \( i \) 个样本的真实标签向量(通常是 one-hot 编码),如果属于第 \( j \) 类则取值为 1,否则为 0;
- \( p_{ij} \) 是模型对第 \( i \) 个样本预测为第 \( j \) 类别的概率[^2]。
#### 实现方式
在实际应用中,交叉熵损失函数通常配合 softmax 或 sigmoid 函数一起使用。以下是基于 PyTorch 的简单实现:
```python
import torch
import torch.nn as nn
# 定义输入 logits 和目标标签
logits = torch.tensor([[2.0, 1.0, 0.1], [0.5, 2.5, 0.3]], requires_grad=True) # 原始输出分数
labels = torch.tensor([0, 1]) # 真实标签
# 使用 PyTorch 提供的交叉熵损失函数
criterion = nn.CrossEntropyLoss()
loss = criterion(logits, labels)
print(f"计算得到的交叉熵损失: {loss.item()}")
# 自动求导并获取梯度
loss.backward()
print(f"logits 对应的梯度:\n{logits.grad}")
```
上述代码展示了如何通过 PyTorch 计算交叉熵损失及其反向传播的过程。`nn.CrossEntropyLoss()` 已经内置了 softmax 操作,因此无需手动调用 `torch.softmax`[^4]。
#### 应用场景
交叉熵损失函数主要适用于以下几种情况:
1. **二分类问题**:此时常搭配 sigmoid 函数来压缩输出到 [0, 1] 区间。
2. **多分类问题**:需结合 softmax 函数将原始输出转换成概率分布[^3]。
3. **不平衡数据集**:可以通过加权的方式调整不同类别的贡献比例,从而缓解类别不平衡带来的影响。
#### 性能优势
相比其他损失函数(如均方误差 MSE),交叉熵具有以下几个优点:
- 更强的学习信号:当预测值远离真实值时,交叉熵能够提供更大的梯度,加速收敛。
- 符合最大似然估计原则:从统计学角度来看,最小化交叉熵等价于最大化似然函数。
---
阅读全文
相关推荐








