NLLLoss和softmax详解
时间: 2025-01-02 08:37:44 浏览: 19
### NLLLoss 和 Softmax 的工作原理
#### 负对数似然损失 (NLLLoss)
负对数似然损失(Negative Log Likelihood Loss, NLLLoss)是一种常用于分类任务的损失函数。该损失函数衡量的是预测的概率分布与真实标签之间的差异。具体来说,对于一个多类别的分类问题,如果模型输出是一个概率分布向量 \( p \),而真实的类别标签是独热编码形式的一维张量,则 NLLLoss 计算方式如下:
\[ L(p,y) = -\log(p_y) \]
其中 \( y \) 是目标类别的索引位置[^1]。
```python
import torch.nn.functional as F
output = torch.tensor([[-0.2798, -0.9358, 0.6607]])
target = torch.tensor([2])
loss = F.nll_loss(F.log_softmax(output, dim=1), target)
print(loss.item())
```
此代码片段展示了如何使用 PyTorch 实现 NLLLoss 并结合 `log_softmax` 函数来处理输入数据。
#### Softmax 函数
Softmax 函数可以将任意实数值转换成一个表示概率分布的形式,即所有元素都介于 0 到 1 之间,并且总和等于 1。这使得它非常适合用来作为多分类问题的最后一层激活函数。给定一个长度为 K 的向量 z ,其对应的 softmax 输出 s 可以定义为:
\[ s_i=\frac{e^{z_i}}{\sum_{j} e^{z_j}}, i∈[1,K]\]
这种变换不仅保留了原始得分的比例关系,还确保了最终得到的结果满足概率性质的要求。
```python
import numpy as np
def softmax(x):
"""Compute the softmax of vector x."""
exp_x = np.exp(x - np.max(x))
return exp_x / exp_x.sum(axis=0)
scores = [3.0, 1.0, 0.2]
print(softmax(scores))
```
上述 Python 代码实现了简单的 softmax 函数计算过程。
---
阅读全文