PyTorch: Softmax多分类实战操作

yizhihongxing

以下是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固定某些层的操作

    1. model = models.resnet18(pretrained=False,num_classes=CIFAR10_num_classes) def my_forward(model, x): mo = nn.Sequential(*list(model.children())[:-1]) feature = mo(x) feature = fe…

    PyTorch 2023年4月8日
    00
  • Pytorch中Tensor与各种图像格式的相互转化详解

    在PyTorch中,可以使用各种方法将Tensor与各种图像格式相互转换。以下是两个示例说明,介绍如何在PyTorch中实现Tensor与各种图像格式的相互转化。 示例1:将Tensor转换为PIL图像 import torch import torchvision.transforms as transforms from PIL import Image…

    PyTorch 2023年5月16日
    00
  • PyTorch实现用CNN识别手写数字

    程序来自莫烦Python,略有删减和改动。 import os import torch import torch.nn as nn import torch.utils.data as Data import torchvision import matplotlib.pyplot as plt torch.manual_seed(1) # reprodu…

    2023年4月7日
    00
  • Pytorch中RNN和LSTM的简单应用

    目录 使用RNN执行回归任务 使用LSTM执行分类任务 使用RNN执行回归任务 import torch from torch import nn import numpy as np import matplotlib.pyplot as plt # torch.manual_seed(1) # reproducible # Hyper Parameter…

    PyTorch 2023年4月8日
    00
  • pytorch 配置详细过程

    torch github 项目多方便,api好调用 cpu版本 装torch 安装最新版本的就可以。 torchvision 要版本对应算法:torchvision版本号=torch版本号第一个数字-1.torch版本号第二个数字+1.torch版本号第三个数字 所以我的就是: pip install torchvision==0.14.1 -i https…

    2023年4月6日
    00
  • 动手学pytorch-优化算法

    优化算法 1.Momentum 2.AdaGrad 3.RMSProp 4.AdaDelta 5.Adam 1.Momentum 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代…

    PyTorch 2023年4月7日
    00
  • PyTorch——(2) tensor基本操作

    @ 目录 维度变换 view()/reshape() 改变形状 unsqueeze()增加维度 squeeze()压缩维度 expand()广播 repeat() 复制 transpose() 交换指定的两个维度的位置 permute() 将维度顺序改变成指定的顺序 合并和分割 cat() 将tensor在指定维度上合并 stack()将tensor堆叠,会…

    2023年4月8日
    00
  • pytorch的.item()方法

    python的.item()用于将字典中每对key和value组成一个元组,并把这些元组放在列表中返回例如person={‘name’:‘lizhong’,‘age’:‘26’,‘city’:‘BeiJing’,‘blog’:‘www.jb51.net’} for key,value in person.items():print ‘key=’,key,’,…

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