推荐答案
// www.javascriptcn.com code example
import torch
import torch.nn as nn
# 假设我们有一个模型输出 log probabilities
model_output = torch.tensor([[ -0.2, -0.9, -0.3],
[-0.8, -0.4, -0.7]])
# 目标标签
target = torch.tensor([1, 2])
# 定义损失函数
loss_fn = nn.NLLLoss()
# 计算损失
loss = loss_fn(model_output, target)
print(loss)本题详细解读
1. torch.nn.NLLLoss 的作用
torch.nn.NLLLoss(Negative Log Likelihood Loss)是用于分类任务的损失函数。它通常与 torch.nn.LogSoftmax 结合使用,用于计算模型输出的负对数似然损失。
2. 输入要求
- 模型输出:
model_output应该是模型输出的 log probabilities,通常通过torch.nn.LogSoftmax或torch.nn.functional.log_softmax获得。 - 目标标签:
target是每个样本的类别索引,形状为(N,),其中N是 batch size。
3. 计算过程
NLLLoss 的计算公式为:
[ \text{loss}(x, y) = -x[y] ]
其中 x 是模型输出的 log probabilities,y 是目标标签。
4. 示例代码解释
model_output是一个形状为(2, 3)的张量,表示 batch size 为 2,每个样本有 3 个类别的 log probabilities。target是一个形状为(2,)的张量,表示每个样本的目标类别索引。loss_fn是NLLLoss的实例。loss是计算得到的损失值。
5. 注意事项
- 确保模型输出是 log probabilities,而不是 raw logits。
- 目标标签应该是类别的索引,而不是 one-hot 编码。