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

手把手教你实现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实现vgg19 训练自定义分类图片

    1、vgg19模型——pytorch 版本= 1.1.0  实现  # coding:utf-8 import torch.nn as nn import torch class vgg19_Net(nn.Module): def __init__(self,in_img_rgb=3,in_img_size=64,out_class=1000,in_fc_s…

    2023年4月8日
    00
  • 解决pytorch报错ImportError: numpy.core.multiarray failed to import

    最近在学pytorch,先用官网提供的conda命令安装了一下: conda install pytorch torchvision cudatoolkit=10.2 -c pytorch 然后按照官网的方法测试是否安装成功,能不能正常使用: import torch x = torch.rand(5, 3) print(x) 若能正常打印出x的值,则说明可…

    PyTorch 2023年4月7日
    00
  • Pytorch之view及view_as使用详解

    在PyTorch中,view和view_as是两个常用的方法,用于改变张量的形状。以下是使用PyTorch中view和view_as方法的详细攻略,包括两个示例说明。 1. view方法 view方法用于改变张量的形状,但是要求改变后的形状与原始形状的元素数量相同。以下是使用PyTorch中view方法的步骤: 导入必要的库 python import to…

    PyTorch 2023年5月15日
    00
  • 详解Pytorch中Dataset的使用

    详解PyTorch中Dataset的使用 在PyTorch中,Dataset是一个抽象类,用于表示数据集。Dataset类提供了一种统一的方式来处理数据集,使得我们可以轻松地加载和处理数据。本文将详细介绍Dataset类的使用方法和示例。 1. 创建自定义数据集 要使用Dataset类,我们需要创建一个自定义的数据集类,该类必须继承自Dataset类,并实现…

    PyTorch 2023年5月15日
    00
  • pytorch实现多项式回归

    以下是PyTorch实现多项式回归的完整攻略,包括数据准备、模型定义、训练和预测等步骤。同时,还提供了两个示例说明。 1. 数据准备 多项式回归是一种回归分析方法,它可以用于拟合非线性数据。在PyTorch中,我们可以使用torch.utils.data.Dataset和torch.utils.data.DataLoader来加载数据集。 以下是一个生成多项…

    PyTorch 2023年5月16日
    00
  • 【深度学习 01】线性回归+PyTorch实现

    1. 线性回归 1.1 线性模型     当输入包含d个特征,预测结果表示为:           记x为样本的特征向量,w为权重向量,上式可表示为:          对于含有n个样本的数据集,可用X来表示n个样本的特征集合,其中行代表样本,列代表特征,那么预测值可用矩阵乘法表示为:          给定训练数据特征X和对应的已知标签y,线性回归的⽬标是…

    2023年4月8日
    00
  • Pytorch 神经网络模块之 Linear Layers

    1. torch.nn.Linear    PyTorch 中的 nn.linear() 是用于设置网络中的全连接层的,需要注意的是全连接层的输入与输出都是二维张量,一般形状为 [batch_size, size]。 “”” in_features: 指的是输入矩阵的列数,即输入二维张量形状 [batch_size, input_size] 中的 input…

    2023年4月6日
    00
  • 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
合作推广
合作推广
分享本页
返回顶部