PyTorch: Softmax多分类实战操作

以下是PyTorch: Softmax多分类实战操作的完整攻略,包含两个示例说明。

环境要求

在开始实战操作之前,需要确保您的系统满足以下要求:

  • Python 3.6或更高版本
  • PyTorch 1.0或更高版本
  • torchvision 0.2.1或更高版本

示例1:使用Softmax多分类模型对MNIST数据集进行分类

在这个示例中,我们将使用Softmax多分类模型对MNIST数据集进行分类。

首先,我们需要下载MNIST数据集。您可以使用以下代码来下载MNIST数据集:

import torchvision.datasets as dsets
import torchvision.transforms as transforms

train_dataset = dsets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = dsets.MNIST(root='./data', train=False, transform=transforms.ToTensor())

然后,我们可以使用以下代码来定义一个Softmax多分类模型:

import torch.nn as nn
import torch.nn.functional as F

class SoftmaxClassifier(nn.Module):
    def __init__(self):
        super(SoftmaxClassifier, self).__init__()
        self.linear = nn.Linear(784, 10)

    def forward(self, x):
        x = x.view(-1, 784)
        x = self.linear(x)
        return F.softmax(x, dim=1)

接下来,我们可以使用以下代码来训练Softmax多分类模型:

import torch.optim as optim

model = SoftmaxClassifier()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=100, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=100, shuffle=False)

num_epochs = 10
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        if (i+1) % 100 == 0:
            print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, i+1, len(train_dataset)//100, loss.item()))

    correct = 0
    total = 0
    for images, labels in test_loader:
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

    print('Accuracy of the model on the 10000 test images: {} %'.format(100 * correct / total))

在这个示例中,我们首先定义了一个Softmax多分类模型。然后,我们使用该模型对MNIST数据集进行分类,并在测试集上计算模型的准确率。

示例2:使用Softmax多分类模型对CIFAR-10数据集进行分类

在这个示例中,我们将使用Softmax多分类模型对CIFAR-10数据集进行分类。

首先,我们需要下载CIFAR-10数据集。您可以使用以下代码来下载CIFAR-10数据集:

import torchvision.datasets as dsets
import torchvision.transforms as transforms

train_dataset = dsets.CIFAR10(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = dsets.CIFAR10(root='./data', train=False, transform=transforms.ToTensor())

然后,我们可以使用以下代码来定义一个Softmax多分类模型:

import torch.nn as nn
import torch.nn.functional as F

class SoftmaxClassifier(nn.Module):
    def __init__(self):
        super(SoftmaxClassifier, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return F.softmax(x, dim=1)

接下来,我们可以使用以下代码来训练Softmax多分类模型:

import torch.optim as optim

model = SoftmaxClassifier()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=100, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=100, shuffle=False)

num_epochs = 10
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        if (i+1) % 100 == 0:
            print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, i+1, len(train_dataset)//100, loss.item()))

    correct = 0
    total = 0
    for images, labels in test_loader:
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

    print('Accuracy of the model on the 10000 test images: {} %'.format(100 * correct / total))

在这个示例中,我们首先定义了一个Softmax多分类模型。然后,我们使用该模型对CIFAR-10数据集进行分类,并在测试集上计算模型的准确率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyTorch: Softmax多分类实战操作 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Pytorch加载预训练模型前n层

    import torch.nn as nn import torchvision.models as models class resnet(nn.Module): def __init__(self): super(resnet,self).__init__() self.model = models.resnet18(pretrained=True) s…

    PyTorch 2023年4月8日
    00
  • Pytorch中的gather使用方法

    PyTorch中的gather使用方法 在PyTorch中,gather是一个非常有用的函数,可以用于从一个张量中按照指定的索引收集元素。本文将介绍如何使用PyTorch中的gather函数,并演示两个示例。 示例一:使用gather函数从一个张量中按照指定的索引收集元素 import torch # 定义张量 x = torch.tensor([[1, 2…

    PyTorch 2023年5月15日
    00
  • Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解

    本篇借鉴了这篇文章,如果有兴趣,大家可以看看:https://blog.csdn.net/geter_CS/article/details/84857220 1、交叉熵:交叉熵主要是用来判定实际的输出与期望的输出的接近程度 2、CrossEntropyLoss()损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类(具体…

    2023年4月6日
    00
  • 在pytorch中计算准确率,召回率和F1值的操作

    在PyTorch中,我们可以使用混淆矩阵来计算准确率、召回率和F1值。混淆矩阵是一个二维矩阵,用于比较模型的预测结果和真实标签。下面是一个简单的示例,演示如何使用混淆矩阵计算准确率、召回率和F1值。 示例一:二分类问题 在二分类问题中,混淆矩阵包含四个元素:真正例(True Positive,TP)、假正例(False Positive,FP)、真反例(Tr…

    PyTorch 2023年5月15日
    00
  • pytorch中:使用bert预训练模型进行中文语料任务,bert-base-chinese下载。

    1.网址:https://huggingface.co/bert-base-chinese?text=%E5%AE%89%E5%80%8D%E6%98%AF%E5%8F%AA%5BMASK%5D%E7%8B%97 2.下载: 下载 在这里插入图片描述

    PyTorch 2023年4月6日
    00
  • pytorch 使用单个GPU与多个GPU进行训练与测试的方法

    在PyTorch中,我们可以使用单个GPU或多个GPU进行模型训练和测试。本文将详细讲解如何使用单个GPU和多个GPU进行训练和测试,并提供两个示例说明。 1. 使用单个GPU进行训练和测试 在PyTorch中,我们可以使用torch.cuda.device()方法将模型和数据移动到GPU上,并使用torch.nn.DataParallel()方法将模型复制…

    PyTorch 2023年5月15日
    00
  • pytorch使用horovod多gpu训练

    pytorch在Horovod上训练步骤分为以下几步: import torch import horovod.torch as hvd # Initialize Horovod 初始化horovod hvd.init() # Pin GPU to be used to process local rank (one GPU per process) 分配到…

    PyTorch 2023年4月8日
    00
  • pytorch 修改预训练model

    class Net(nn.Module): def __init__(self , model): super(Net, self).__init__() #取掉model的后两层 self.resnet_layer = nn.Sequential(*list(model.children())[:-2]) self.transion_layer = nn.…

    PyTorch 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部