手把手教你实现PyTorch的MNIST数据集

yizhihongxing

手把手教你实现PyTorch的MNIST数据集

在本文中,我们将手把手教你如何使用PyTorch实现MNIST数据集的分类任务。我们将使用两个示例来说明如何完成这些步骤。

示例1:使用全连接神经网络实现MNIST分类

以下是使用全连接神经网络实现MNIST分类的步骤:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# 定义数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

# 加载数据集
train_dataset = datasets.MNIST('data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST('data', train=False, download=True, transform=transform)

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(-1, 784)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = Net()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)

# 训练模型
for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(train_dataset, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()

    print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_dataset)}')

# 测试模型
correct = 0
total = 0
with torch.no_grad():
    for data in test_dataset:
        inputs, labels = data
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += 1
        correct += (predicted == labels).sum().item()

print(f'Accuracy: {correct / len(test_dataset)}')

在上述代码中,我们首先定义了数据预处理,然后加载了MNIST数据集。接着,我们定义了一个简单的全连接神经网络Net,它含有一个输入层、一个隐藏层和一个输出层。然后,我们创建了一个模型实例model。我们还定义了损失函数criterion和优化器optimizer。在训练模型的过程中,我们使用交叉熵损失函数nn.CrossEntropyLoss()来计算损失。在测试模型的过程中,我们使用torch.max()函数来获取输出中的最大值,并将其与标签进行比较以计算准确度。

示例2:使用卷积神经网络实现MNIST分类

以下是使用卷积神经网络实现MNIST分类的步骤:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# 定义数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

# 加载数据集
train_dataset = datasets.MNIST('data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST('data', train=False, download=True, transform=transform)

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

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

model = Net()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)

# 训练模型
for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(train_dataset, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()

    print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_dataset)}')

# 测试模型
correct = 0
total = 0
with torch.no_grad():
    for data in test_dataset:
        inputs, labels = data
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += 1
        correct += (predicted == labels).sum().item()

print(f'Accuracy: {correct / len(test_dataset)}')

在上述代码中,我们首先定义了数据预处理,然后加载了MNIST数据集。接着,我们定义了一个简单的卷积神经网络Net,它含有两个卷积层、两个池化层和两个全连接层。然后,我们创建了一个模型实例model。我们还定义了损失函数criterion和优化器optimizer。在训练模型的过程中,我们使用交叉熵损失函数nn.CrossEntropyLoss()来计算损失。在测试模型的过程中,我们使用torch.max()函数来获取输出中的最大值,并将其与标签进行比较以计算准确度。

结论

在本文中,我们手把手教你如何使用PyTorch实现MNIST数据集的分类任务。我们使用了两个示例来说明如何完成这些步骤。如果您按照这些步骤操作,您应该能够成功实现MNIST分类并在训练模型时使用它们。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手把手教你实现PyTorch的MNIST数据集 - Python技术站

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

相关文章

  • PyTorch教程【二】Python编辑器的选择、安装及配置(PyCharm、Jupyter)

    详细步骤参考博客:PyCharm安装教程 二、PyCharm环境配置 可参考博客:在Pycharm中设置Anaconda环境(不完全一样) 三、PyCharm实用功能 Python Console 四、Jupyter的安装 安装了Anaconda后,默认里面就安装了Jupyter。安装Anaconda的方法可参考博客:Anaconda的安装 五、在新环境中安…

    PyTorch 2023年4月7日
    00
  • pytorch中的hook机制register_forward_hook

    PyTorch中的hook机制register_forward_hook详解 在PyTorch中,我们可以使用hook机制来获取模型的中间层输出。hook机制是一种在模型前向传播过程中注册回调函数的机制,可以用于获取模型的中间层输出、修改模型的中间层输出等。其中,register_forward_hook是一种常用的hook机制,可以在模型前向传播过程中注册…

    PyTorch 2023年5月15日
    00
  • 利用Pytorch实现获取特征图的方法详解

    利用PyTorch实现获取特征图的方法详解 在本文中,我们将介绍如何使用PyTorch获取卷积神经网络(CNN)中的特征图。我们将提供两个示例,一个是使用预训练模型,另一个是使用自定义模型。 示例1:使用预训练模型 以下是使用预训练模型获取特征图的示例代码: import torch import torchvision.models as models i…

    PyTorch 2023年5月16日
    00
  • pytorch 实现 AlexNet 网络模型训练自定义图片分类

    1、AlexNet网络模型,pytorch1.1.0 实现      注意:AlexNet,in_img_size >=64 输入图片矩阵的大小要大于等于64 # coding:utf-8 import torch.nn as nn import torch class alex_net(nn.Module): def __init__(self,in…

    PyTorch 2023年4月8日
    00
  • pytorch实现手写数字图片识别

    PyTorch是一个基于Python的科学计算库,它主要用于深度学习研究。在本文中,我们将介绍如何使用PyTorch实现手写数字图片识别。我们将分为两个部分,第一部分是数据预处理和模型训练,第二部分是模型测试和结果分析。 第一部分:数据预处理和模型训练 数据预处理 我们将使用MNIST数据集,该数据集包含60,000个训练图像和10,000个测试图像。每个图…

    PyTorch 2023年5月15日
    00
  • pytorch 矩阵数据增加维度unsqueeze和降低维度squeeze

    增加一个维度 out.unsqueeze(-1) 降低一个维度 out.squeeze(dim=1)  

    PyTorch 2023年4月8日
    00
  • [pytorch修改]npyio.py 实现在标签中使用两种delimiter分割文件的行

    from __future__ import division, absolute_import, print_function import io import sys import os import re import itertools import warnings import weakref from operator import itemg…

    PyTorch 2023年4月8日
    00
  • Pytorch实现List Tensor转Tensor,reshape拼接等操作

    以下是PyTorch实现List Tensor转Tensor、reshape、拼接等操作的两个示例说明。 示例1:将List Tensor转换为Tensor 在这个示例中,我们将使用PyTorch将List Tensor转换为Tensor。 首先,我们需要准备数据。我们将使用以下代码来生成List Tensor: import torch x1 = torc…

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