用Pytorch训练CNN(数据集MNIST,使用GPU的方法)

以下是使用PyTorch训练CNN(数据集MNIST,使用GPU的方法)的完整攻略。

步骤一:导入必要的库

首先,我们需要导入必要的库,包括PyTorch、torchvision、numpy和matplotlib等。

import torch
import torchvision
import numpy as np
import matplotlib.pyplot as plt

步骤二:加载数据集

接下来,我们需要加载MNIST数据集。可以使用torchvision中的datasets模块来加载数据集。

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

步骤三:定义模型

我们使用一个简单的卷积神经网络来实现手写数字识别。定义模型的代码如下:

class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = torch.nn.Conv2d(1, 32, kernel_size=5, padding=2)
        self.conv2 = torch.nn.Conv2d(32, 64, kernel_size=5, padding=2)
        self.fc1 = torch.nn.Linear(7 * 7 * 64, 1024)
        self.fc2 = torch.nn.Linear(1024, 10)

    def forward(self, x):
        x = torch.nn.functional.relu(self.conv1(x))
        x = torch.nn.functional.max_pool2d(x, 2)
        x = torch.nn.functional.relu(self.conv2(x))
        x = torch.nn.functional.max_pool2d(x, 2)
        x = x.view(-1, 7 * 7 * 64)
        x = torch.nn.functional.relu(self.fc1(x))
        x = torch.nn.functional.dropout(x, training=self.training)
        x = self.fc2(x)
        return torch.nn.functional.log_softmax(x, dim=1)

model = Net()

步骤四:定义损失函数和优化器

我们使用交叉熵损失函数和随机梯度下降优化器来训练模型。

criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

步骤五:将模型和数据移动到GPU上

我们需要将模型和数据移动到GPU上进行训练。

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)

步骤六:训练模型

接下来,我们使用训练集对模型进行训练。

train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)

for epoch in range(10):
    for batch_idx, (data, target) in enumerate(train_loader):
        data, target = data.to(device), target.to(device)
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 100 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                100. * batch_idx / len(train_loader), loss.item()))

步骤七:测试模型

最后,我们使用测试集对模型进行测试。

test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=1000, shuffle=True)

with torch.no_grad():
    correct = 0
    total = 0
    for data, target in test_loader:
        data, target = data.to(device), target.to(device)
        output = model(data)
        _, predicted = torch.max(output.data, 1)
        total += target.size(0)
        correct += (predicted == target).sum().item()

    print('Accuracy of the network on the 10000 test images: %d %%' % (
        100 * correct / total))

上面的代码实现了使用PyTorch训练CNN(数据集MNIST,使用GPU的方法)。下面是两个示例:

示例一:显示数据集中的张图片

image, label = train_dataset[0]
plt.imshow(image.squeeze().numpy(), cmap='gray')
plt.title('Label: %d' % label)
plt.show()

示例二:显示模型的预测结果

image, label = test_dataset[0]
image = image.to(device)
output = model(image.unsqueeze(0))
_, predicted = torch.max(output.data, 1)
plt.imshow(image.cpu().squeeze().numpy(), cmap='gray')
plt.title('Predicted: %d, Actual: %d' % (predicted.item(), label))
plt.show()

上面的代码分别显示了数据集中的一张图片和模型的预测结果。

总结:以上就是使用PyTorch训练CNN(数据集MNIST,使用GPU的方法)的完整攻略,包括数据集的加载、模型的定义、损失函数和优化器的定义、将模型和数据移动到GPU上、模型的训练和测试,以及两个示例的展示。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Pytorch训练CNN(数据集MNIST,使用GPU的方法) - Python技术站

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

相关文章

  • python机器学习之线性回归详解

    Python机器学习之线性回归详解 线性回归是机器学习中最基本的模型之一,它用于预测一个连续的输出变量,基于一个或多个输入变量。在本攻略中,将介绍线性回归的基本概、模型训练和评估方法,并提供两个示例。 线性回归的基本概 线性回归是一种用于建立输入变量和输出变量之间线性关系的模型。它的基形式为: $$ y = \beta_0 + \beta_1x_1 + \b…

    python 2023年5月14日
    00
  • keras 自定义loss层+接受输入实例

    下面是Keras自定义loss层的完整攻略: 1. 什么是Keras自定义loss层? 在Keras中,我们可以自定义模型的层、损失函数、指标等,这样可以满足一些特定的需求。其中,自定义损失函数就需要用到Keras的自定义loss层。 自定义loss层就是一个继承tf.keras.losses.Loss的类,我们需要在这个类中实现损失计算的逻辑。然后我们可以…

    python 2023年5月13日
    00
  • Python中Numpy模块使用详解

    Python中Numpy模块使用详解 Numpy是Python中用于科学计算的一个重要库,它提供了高效的多维数组对象和各种派生对象,包括矩和张量等。本攻略将详细介绍Python Numpy模块的基本用法。 安装Numpy模块 使用Numpy模块前,需要先安装它。可以使用以下命令在命令中安装Numpy模块: pip install numpy 导入Numpy模…

    python 2023年5月13日
    00
  • Linux安装Pytorch1.8GPU(CUDA11.1)的实现

    下面是Linux安装PyTorch 1.8 GPU(CUDA 11.1)的完整攻略: 1. 安装CUDA和cuDNN 首先,需要安装NVIDIA的CUDA和cuDNN。可以通过以下步骤安装: 下载并安装最新版本的CUDA Toolkit。可以通过cuda官网下载相应版本的CUDA Toolkit,并按照官方文档执行安装步骤。 下载cuDNN。可以在cuDNN…

    python 2023年5月13日
    00
  • Numpy安装、升级与卸载的详细图文教程

    Numpy安装、升级与卸载的详细图文教程 Numpy是Python中一个非常流行的科学计算库,它提供了许多常用的数学函数和工具。在使用Numpy之前,我们需要先安装它。本攻略将详细讲解Numpy的安装、升级与卸载的方法,并提供两个示例。 Numpy的安装 使用pip安装Numpy 在命令行中使用pip安装Numpy非常简单。只需要输入以下命令即可: pip …

    python 2023年5月13日
    00
  • 使用NumPy读取MNIST数据的实现代码示例

    以下是关于“使用NumPy读取MNIST数据的实现代码示例”的完整攻略。 MNIST数据集简介 MNIST数据集是一个手写数字别数据集,包含60000个训练样本和10000个测试样本。每个样本是一个28x的灰度图像,标签为0-9之间的数字。 NumPy读取MNIST数据集 使用NumPy可以方便地读取MN数据集。下面是一个示例代码,演示了如何使用NumPy读…

    python 2023年5月14日
    00
  • 基于python 二维数组及画图的实例详解

    基于Python二维数组及画图的实例详解 在Python中,二维数组是一种常见的数据结构,可以用于存储和处理二维数据。同时,Python也提供了许多库和工具,可以用于绘制二维图形。本文将详细讲解如何使用Python实现二维数组及画图,并提供两个示例说明。 1. 二维数组 在Python中,可以使用列表嵌套的方式实现二维数组。以下是一个示例说明: # 创建一个…

    python 2023年5月14日
    00
  • 浅谈利用numpy对矩阵进行归一化处理的方法

    以下是关于“浅谈利用numpy对矩阵进行归一化处理的方法”的完整攻略。 归一化简介 归一化是一种常见的数据预处理方法,它可以将数据缩放到一个特定的范围内,以便更好地分析和处理。在矩阵中,归一化可以使不同度的数据具有相同的权重,从而更好地进行比和分析。 numpy中的归一化方法 在numpy中,可以使用numpy.linalg.norm()函数对矩阵进行归一化…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部