PyTorch快速入门与深度学习模型训练

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 这篇文章是PyTorch的入门指南,介绍了PyTorch作为深度学习框架的基本概念和使用方法。内容包括PyTorch的背景、基础操作如张量创建、运算、自动微分,以及如何构建和训练简单的全连接神经网络模型进行MNIST手写数字识别。通过这篇文章,读者可以快速了解如何在PyTorch中搭建和训练深度学习模型。

一、引言

随着人工智能技术的迅猛发展,深度学习已成为机器学习和人工智能领域的核心技术之一。PyTorch作为目前最受欢迎的深度学习框架之一,凭借其动态图、简洁易用的API和高效的性能,受到了广大研究者和开发者的青睐。本文旨在为读者提供PyTorch的快速入门指南,并通过代码示例展示如何使用PyTorch进行深度学习模型的训练。


二、PyTorch基础

PyTorch是一个开源的深度学习框架,由Facebook人工智能研究院(FAIR)开发和维护。它提供了一个灵活的、易于使用的接口,用于构建和训练神经网络。PyTorch支持动态图,这意味着可以在运行时构建计算图,这对于调试和实验非常有用。

在PyTorch中,张量(Tensor)是基本的数据结构,类似于NumPy的ndarray。但PyTorch的张量支持GPU加速,并且具有自动微分功能,这使得神经网络的训练变得更加容易。


三、PyTorch快速入门

  1. 安装PyTorch

首先,确保已经安装了Python和pip。然后,可以通过pip安装PyTorch。以下是一个示例命令,用于安装适用于CUDA 10.2的PyTorch 1.8.0版本:

pip install torch==1.8.0+cu102 torchvision==0.9.0+cu102 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html

注意:请根据自己的CUDA版本和PyTorch版本选择合适的安装命令。

  1. 导入PyTorch库

在Python脚本中,可以使用以下命令导入PyTorch库:

import torch
  1. 创建张量

在PyTorch中,可以使用torch.tensor()函数创建张量。以下是一个示例:

# 创建一个形状为(3,)的一维张量  
x = torch.tensor([1.0, 2.0, 3.0])  
print(x)  
# 创建一个形状为(2, 3)的二维张量  
y = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])  
print(y)
  1. 张量运算

PyTorch支持各种张量运算,如加法、乘法、矩阵乘法等。以下是一些示例:

# 张量加法  
z = x + y  
print(z)  
# 张量乘法(元素级乘法)  
w = x * y  
print(w)  
# 矩阵乘法(注意:需要满足矩阵乘法的条件)  
a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])  
b = torch.tensor([[5.0], [6.0]])  
c = torch.mm(a, b)  # 使用torch.mm进行矩阵乘法  
print(c)
  1. 自动微分

PyTorch的自动微分功能使得神经网络的训练变得非常容易。以下是一个简单的示例,演示如何使用PyTorch计算函数的梯度:

# 定义一个函数  
x = torch.tensor([2.0], requires_grad=True)  # 创建一个需要计算梯度的张量  
y = x ** 2
# 计算梯度  
y.backward()  # 对y关于x求导,并将结果存储在x.grad中  
print(x.grad)  # 输出dy/dx = 2x = 4.0


四、深度学习模型训练

接下来,我们将使用PyTorch构建一个简单的全连接神经网络(FCNN),并用于训练MNIST手写数字识别任务。

  1. 数据加载与预处理

首先,我们需要加载MNIST数据集并进行预处理。PyTorch提供了torchvision.datasetstorchvision.transforms模块,可以方便地加载和预处理图像数据。以下是一个示例:

import torchvision  
import torchvision.transforms as transforms  
# 定义数据预处理流程  
transform = transforms.Compose([  
    transforms.ToTensor(),  # 将PIL图像转换为Tensor  
    transforms.Normalize((0.5,), (0.5,))  # 归一化到[-1, 1]  
])  
# 加载训练集和测试集  
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)  
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)  
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)  
testloader = torch.utils.data.DataLoader(testset,batch_size=64, shuffle=False)
# 查看一个训练样本
images, labels = next(iter(trainloader))
print('Image shape:', images.shape)
print('Label:', labels[0])

2. 定义模型  

接下来,我们定义一个简单的全连接神经网络模型。PyTorch的`nn.Module`是所有神经网络模块的基类,我们可以继承这个类来定义自己的模型。

 import torch.nn as nn  
import torch.nn.functional as F  
class Net(nn.Module):  
    def __init__(self):  
        super(Net, self).__init__()  
        self.fc1 = nn.Linear(28 * 28, 500)  
        self.fc2 = nn.Linear(500, 10)  
    def forward(self, x):  
        x = x.view(-1, 28 * 28)  # 展平输入图像  
        x = F.relu(self.fc1(x))  # 通过第一个全连接层并应用ReLU激活函数  
        x = self.fc2(x)  # 通过第二个全连接层  
        return F.log_softmax(x, dim=1)  # 应用log_softmax得到输出概率分布  
# 实例化模型  
model = Net()  
print(model)
  1. 定义损失函数和优化器

在PyTorch中,我们使用nn.CrossEntropyLoss()作为损失函数,对于分类问题,它结合了log_softmax和nll_loss。对于优化器,我们选择torch.optim.SGD作为随机梯度下降优化器。

criterion = nn.CrossEntropyLoss()  
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
  1. 训练模型

现在我们可以开始训练模型了。我们将遍历训练集的多个epoch,并在每个epoch中遍历所有的训练样本。在每个迭代中,我们将执行前向传播、计算损失、执行反向传播并更新权重。

num_epochs = 5
for epoch in range(num_epochs):  
for images, labels in trainloader:  
# 前向传播  
        outputs = model(images)  
        loss = criterion(outputs, labels)  
# 反向传播和优化  
        optimizer.zero_grad()  # 清空之前的梯度  
        loss.backward()  # 反向传播计算梯度  
        optimizer.step()  # 根据梯度更新权重  
print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item()}')  
# 在测试集上评估模型  
correct = 0
total = 0
with torch.no_grad():  # 不需要计算梯度  
for images, labels in testloader:  
        outputs = model(images)  
        _, predicted = torch.max(outputs.data, 1)  
        total += labels.size(0)  
        correct += (predicted == labels).sum().item()  
print(f'Accuracy of the network on the 10000 test images: {100 * correct / total} %')

 这就是使用PyTorch进行深度学习模型训练的基本流程。通过本文的介绍,读者应该对PyTorch的基础用法和深度学习模型的训练过程有了更深入的了解。当然,PyTorch的功能远不止于此,还有很多高级特性和工具等待读者去发掘和使用。

目录
相关文章
|
18天前
|
机器学习/深度学习 人工智能 安全
探索AI的未来:从机器学习到深度学习
【10月更文挑战第28天】本文将带你走进AI的世界,从机器学习的基本概念到深度学习的复杂应用,我们将一起探索AI的未来。你将了解到AI如何改变我们的生活,以及它在未来可能带来的影响。无论你是AI专家还是初学者,这篇文章都将为你提供新的视角和思考。让我们一起探索AI的奥秘,看看它将如何塑造我们的未来。
54 3
|
8天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
27 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
15天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
35 7
|
1月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
165 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
64 2
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
56 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
机器学习/深度学习 自然语言处理 算法
机器学习和深度学习之间的区别
机器学习和深度学习在实际应用中各有优势和局限性。机器学习适用于一些数据量较小、问题相对简单、对模型解释性要求较高的场景;而深度学习则在处理大规模、复杂的数据和任务时表现出色,但需要更多的计算资源和数据,并且模型的解释性较差。在实际应用中,需要根据具体的问题和需求,结合两者的优势,选择合适的方法来解决问题。
62 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
浅谈机器学习与深度学习的区别
浅谈机器学习与深度学习的区别
50 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能的未来:从机器学习到深度学习的演进
【10月更文挑战第8天】人工智能的未来:从机器学习到深度学习的演进
61 0
|
10天前
|
机器学习/深度学习 人工智能 测试技术
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术,尤其是卷积神经网络(CNN)在图像识别任务中的最新进展和面临的主要挑战。通过分析不同的网络架构、训练技巧以及优化策略,文章旨在提供一个全面的概览,帮助研究人员和实践者更好地理解和应用这些技术。
43 9