PyTorch一小时掌握之神经网络分类篇

以下是“PyTorch一小时掌握之神经网络分类篇”的完整攻略,包括两个示例说明。

示例1:使用全连接神经网络对MNIST数据集进行分类

首先,我们需要加载MNIST数据集,并将其分为训练集和测试集。然后,我们定义一个全连接神经网络,包含两个隐藏层和一个输出层。我们使用ReLU激活函数和交叉熵损失函数,并使用随机梯度下降优化器进行训练。

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

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

# 定义超参数
input_size = 784
hidden_size = 128
num_classes = 10
num_epochs = 10
batch_size = 100
learning_rate = 0.001

# 定义全连接神经网络
class Net(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc3 = nn.Linear(hidden_size, num_classes)

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

# 创建模型实例、损失函数和优化器
model = Net(input_size, hidden_size, num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate)

# 训练模型
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        # 前向传播
        outputs = model(images)
        loss = criterion(outputs, labels)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        # 打印损失
        if (i+1) % 100 == 0:
            print(f"Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}")

# 测试模型
with torch.no_grad():
    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(f"Accuracy: {100 * correct / total}%")

在这个示例中,我们首先加载MNIST数据集,并将其分为训练集和测试集。然后,我们定义了一个全连接神经网络,包含两个隐藏层和一个输出层。我们使用ReLU激活函数和交叉熵损失函数,并使用随机梯度下降优化器进行训练。在训练过程中,我们使用一个循环遍历训练集中的所有数据,并计算损失和梯度。最后,我们使用测试集评估模型的准确性。

示例2:使用卷积神经网络对CIFAR-10数据集进行分类

首先,我们需要加载CIFAR-10数据集,并将其分为训练集和测试集。然后,我们定义一个卷积神经网络,包含两个卷积层和两个全连接层。我们使用ReLU激活函数和交叉熵损失函数,并使用Adam优化器进行训练。

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

# 加载CIFAR-10数据集
train_dataset = datasets.CIFAR10(root='data/', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = datasets.CIFAR10(root='data/', train=False, transform=transforms.ToTensor(), download=True)

# 定义超参数
num_classes = 10
num_epochs = 10
batch_size = 100
learning_rate = 0.001

# 定义卷积神经网络
class Net(nn.Module):
    def __init__(self, num_classes):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
        self.relu = nn.ReLU()
        self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(64 * 8 * 8, 512)
        self.fc2 = nn.Linear(512, num_classes)

    def forward(self, x):
        x = self.relu(self.conv1(x))
        x = self.pool(self.relu(self.conv2(x)))
        x = x.view(-1, 64 * 8 * 8)
        x = self.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 创建模型实例、损失函数和优化器
model = Net(num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)

# 训练模型
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        # 前向传播
        outputs = model(images)
        loss = criterion(outputs, labels)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        # 打印损失
        if (i+1) % 100 == 0:
            print(f"Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}")

# 测试模型
with torch.no_grad():
    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(f"Accuracy: {100 * correct / total}%")

在这个示例中,我们首先加载CIFAR-10数据集,并将其分为训练集和测试集。然后,我们定义了一个卷积神经网络,包含两个卷积层和两个全连接层。我们使用ReLU激活函数和交叉熵损失函数,并使用Adam优化器进行训练。在训练过程中,我们使用一个循环遍历训练集中的所有数据,并计算损失和梯度。最后,我们使用测试集评估模型的准确性。

总之,PyTorch提供了丰富的工具和函数来实现神经网络分类。我们可以使用nn.Linearnn.Conv2d函数来定义全连接层和卷积层,使用nn.ReLU函数来定义ReLU激活函数,使用nn.CrossEntropyLoss函数来定义交叉熵损失函数,使用optim.SGDoptim.Adam函数来定义优化器。在训练过程中,我们需要使用一个循环遍历数据集中的所有数据,并计算损失和梯度。最后,我们使用测试集评估模型的准确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyTorch一小时掌握之神经网络分类篇 - Python技术站

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

相关文章

  • KL散度理解以及使用pytorch计算KL散度

    KL散度理解以及使用pytorch计算KL散度 计算例子:  

    2023年4月7日
    00
  • Pytorch 如何训练网络时调整学习率

    PyTorch如何训练网络时调整学习率 在PyTorch中,我们可以使用学习率调度器来动态地调整学习率。本文将介绍如何使用PyTorch中的学习率调度器来调整学习率,并提供两个示例说明。 1. 示例1:使用StepLR调整学习率 以下是一个示例,展示如何使用StepLR调整学习率。 import torch import torch.nn as nn imp…

    PyTorch 2023年5月15日
    00
  • pytorch::Dataloader中的迭代器和生成器应用详解

    PyTorch::Dataloader中的迭代器和生成器应用详解 在PyTorch中,Dataloader是一个非常有用的工具,可以帮助我们加载和处理数据。本文将详细介绍如何使用Dataloader中的迭代器和生成器,并提供两个示例说明。 迭代器 在PyTorch中,我们可以使用Dataloader中的迭代器来遍历数据集。以下是一个简单的示例: import…

    PyTorch 2023年5月16日
    00
  • Pytorch模型的保存/复用/迁移实现代码

    PyTorch是一个流行的深度学习框架,它提供了许多内置的模型保存、复用和迁移方法。在本攻略中,我们将介绍如何使用PyTorch实现模型的保存、复用和迁移。 模型的保存 在PyTorch中,我们可以使用torch.save()函数将模型保存到磁盘上。以下是一个示例代码,演示了如何保存模型: import torch import torch.nn as nn…

    PyTorch 2023年5月15日
    00
  • Pytorch中accuracy和loss的计算知识点总结

    PyTorch中accuracy和loss的计算知识点总结 在PyTorch中,accuracy和loss是深度学习模型训练和评估的两个重要指标。本文将对这两个指标的计算方法进行详细讲解,并提供两个示例说明。 1. 计算accuracy accuracy是模型分类任务中的一个重要指标,用于衡量模型在测试集上的分类准确率。在PyTorch中,可以使用以下代码计…

    PyTorch 2023年5月15日
    00
  • 基于TorchText的PyTorch文本分类

    作者|DR. VAIBHAV KUMAR编译|VK来源|Analytics In Diamag 文本分类是自然语言处理的重要应用之一。在机器学习中有多种方法可以对文本进行分类。但是这些分类技术大多需要大量的预处理和大量的计算资源。在这篇文章中,我们使用PyTorch来进行多类文本分类,因为它有如下优点: PyTorch提供了一种强大的方法来实现复杂的模型体系…

    2023年4月8日
    00
  • PyTorch搭建一维线性回归模型(二)

    PyTorch搭建一维线性回归模型(二) 在本文中,我们将继续介绍如何使用PyTorch搭建一维线性回归模型。本文将包含两个示例说明。 示例一:使用PyTorch搭建一维线性回归模型 我们可以使用PyTorch搭建一维线性回归模型。示例代码如下: import torch import torch.nn as nn import numpy as np im…

    PyTorch 2023年5月15日
    00
  • transforms模块—PyTorch图像处理与数据增强方法

    计算机视觉任务中,对图像的变换(Image Transform)往往是必不可少的操作,例如在迁移学习中,需要对图像尺寸进行变换以使用预训练网络的输入层,又如对数据进行增强以丰富训练数据。 作为深度学习领域的主流框架,pytorch中提供了丰富的图像变换API。本文将对pytorch中torchvision.transforms提供的丰富多样的图像变换API进…

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