使用torch.nn.functional的nll_loss()函数进行模型评估
torch.nn.functional的nll_loss()函数用于计算负对数似然损失函数(Negative Log Likelihood Loss)。该函数常用于多类别分类问题,特别适用于带有softmax激活函数的模型。
nll_loss()函数的使用示例如下:
import torch
import torch.nn as nn
import torch.nn.functional as F
# 创建一个简单的分类模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc = nn.Linear(10, 2) # 10个输入特征,2个输出类别
def forward(self, x):
x = self.fc(x)
return F.log_softmax(x, dim=1) # 使用log_softmax作为激活函数
# 定义训练数据
input_data = torch.randn(5, 10) # 5个样本,每个样本有10个特征
target_labels = torch.tensor([1, 0, 1, 0, 1]) # 5个样本的目标类别
# 创建模型实例
model = Net()
# 计算模型的预测结果
output = model(input_data)
# 计算损失函数
loss = F.nll_loss(output, target_labels)
print(loss.item()) # 打印损失值
在上述代码中,首先我们定义了一个简单的分类模型Net,该模型包含一个全连接层fc和一个softmax激活函数log_softmax。然后我们创建了一个5x10的输入数据张量input_data和一个长度为5的目标类别张量target_labels。
接下来,创建模型实例model并传入输入数据input_data进行前向传播,得到模型的输出结果output。
最后,使用nll_loss()函数计算损失函数,将模型的输出结果output和目标类别target_labels作为输入。最后输出的损失值可以使用loss.item()获取,方便后续的输出和分析。
需要注意的是,nll_loss()函数的输入output需要经过log_softmax函数处理,而不是直接使用softmax函数。这是因为nll_loss()函数内部会自动将输入output进行softmax激活函数处理,在这里需要避免重复处理。
nll_loss()函数还可以通过设置参数reduce来控制损失函数的计算方式,默认情况下reduce为True,表示对所有样本取平均值。当reduce为False时,表示对每个样本单独计算损失值。可以通过设置参数size_average或者parametersDeprecated来实现相同的效果,但这些参数将在未来版本中被删除。
以上是使用torch.nn.functional的nll_loss()函数进行模型评估的一个简单例子。通过这个函数,我们可以方便地计算模型的损失函数,从而评估模型的性能。
