欢迎访问宙启技术站
智能推送

Torch.nn.functional中的nll_loss()函数的用法与示例

发布时间:2023-12-16 21:52:58

在PyTorch的Torch.nn.functional模块中,nll_loss()函数用于计算负log似然损失(negative log likelihood loss)。

负log似然损失可用于多分类问题中,在训练神经网络时,度量网络预测与真实标签之间的差距。具体来说,该函数将网络的输出和真实标签作为输入,并计算网络输出的对数概率和真实标签之间的负log概率的平均值。

nll_loss()函数的语法如下:

torch.nn.functional.nll_loss(input, target, weight=None, ignore_index=-100, reduction='mean')

参数说明:

- input:Tensor,表示网络的输出。该张量的维度是(N, C),其中N表示批次大小,C表示类别数。

- target:LongTensor,表示真实标签。该张量的维度是(N),其中N表示批次大小。标签的取值范围为0到C-1。

- weight:Tensor,表示损失权重。可以提供一个长度为C的一维张量,并将其用于不同类别的加权和。默认为None。

- ignore_index:int,表示忽略标签。如果给定的标签等于该值,则不计算该样本的损失。默认为-100。

- reduction:str,表示损失的减少方式。可选值为'mean'(默认)、'sum'和'none'。用于指定如何进行损失值的平均或求和。

下面通过一个示例来演示nll_loss()函数的用法:

import torch
import torch.nn.functional as F

# 定义网络输出
input = torch.tensor([[0.5, 0.2, 0.3],
                      [0.1, 0.6, 0.3],
                      [0.3, 0.2, 0.5]])
# 定义真实标签
target = torch.tensor([0, 2, 1])

# 计算损失
loss = F.nll_loss(input, target)

print(loss)

输出结果为:

tensor(0.9022)

在这个例子中,网络的输出是一个3x3的张量,其中每行表示一个样本的预测概率分布。真实标签是一个长度为3的张量,表示每个样本的真实类别。通过调用nll_loss()函数,可以计算出网络预测与真实标签之间的负log似然损失。这里的损失值为0.9022,表示网络预测与真实标签之间的差距较大。