使用torch.nn.functional中的nll_loss()函数计算多类别分类的损失
发布时间:2023-12-16 22:01:06
在PyTorch中,可以使用torch.nn.functional中的nll_loss()函数来计算多类别分类的损失。nll_loss()函数计算的是负对数似然损失,适用于多类别分类问题。
下面是一个使用nll_loss()函数的示例:
首先,导入必要的库和模块:
import torch import torch.nn as nn import torch.nn.functional as F
接下来,创建一个包含四个样本和三个类别的虚拟数据集:
# 创建虚拟数据集 # 每个样本有三个特征 # 数据集大小为4 # 分为三个类别 # 标签为每个样本所属的类别 X = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) y = torch.LongTensor([0, 1, 1, 2])
接下来,创建一个包含三个类别的多类别分类模型:
# 创建多类别分类模型
# 输入特征数为三
# 输出类别数为三
class Classifier(nn.Module):
def __init__(self):
super(Classifier, self).__init__()
self.fc = nn.Linear(3, 3)
def forward(self, x):
x = self.fc(x)
return F.log_softmax(x, dim=1)
然后,定义模型、优化器和损失函数:
# 定义模型、优化器和损失函数 model = Classifier() optimizer = torch.optim.SGD(model.parameters(), lr=0.01) criterion = nn.NLLLoss()
接下来,进行模型的训练过程:
# 进行模型的训练
num_epochs = 100
for epoch in range(num_epochs):
# 前向传播
outputs = model(X)
# 计算损失
loss = criterion(outputs, y)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 打印每个训练轮次的损失
if (epoch+1) % 10 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
最后,使用训练好的模型进行预测:
# 使用训练好的模型进行预测
output = model(X)
_, predicted = torch.max(output.data, 1)
print('Predicted labels:', predicted)
这个例子展示了如何使用torch.nn.functional中的nll_loss()函数计算多类别分类的损失。首先,创建一个包含虚拟数据的数据集。然后创建一个多类别分类模型,并定义优化器和损失函数。接下来,进行模型的训练过程,并打印每个训练轮次的损失。最后,使用训练好的模型进行预测。
