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

简介: 这篇文章是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的功能远不止于此,还有很多高级特性和工具等待读者去发掘和使用。

目录
相关文章
|
5月前
|
机器学习/深度学习 人工智能 PyTorch
PyTorch深度学习 ? 带你从入门到精通!!!
🌟 蒋星熠Jaxonic,深度学习探索者。三年深耕PyTorch,从基础到部署,分享模型构建、GPU加速、TorchScript优化及PyTorch 2.0新特性,助力AI开发者高效进阶。
PyTorch深度学习 ? 带你从入门到精通!!!
|
8月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
1067 27
|
7月前
|
机器学习/深度学习 数据可视化 算法
深度学习模型结构复杂、参数众多,如何更直观地深入理解你的模型?
深度学习模型虽应用广泛,但其“黑箱”特性导致可解释性不足,尤其在金融、医疗等敏感领域,模型决策逻辑的透明性至关重要。本文聚焦深度学习可解释性中的可视化分析,介绍模型结构、特征、参数及输入激活的可视化方法,帮助理解模型行为、提升透明度,并推动其在关键领域的安全应用。
703 0
|
8月前
|
机器学习/深度学习 PyTorch 测试技术
从训练到推理:Intel Extension for PyTorch混合精度优化完整指南
PyTorch作为主流深度学习框架,凭借动态计算图和异构计算支持,广泛应用于视觉与自然语言处理。Intel Extension for PyTorch针对Intel硬件深度优化,尤其在GPU上通过自动混合精度(AMP)提升训练与推理性能。本文以ResNet-50在CIFAR-10上的实验为例,详解如何利用该扩展实现高效深度学习优化。
461 0
|
6月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
575 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
5月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
8月前
|
机器学习/深度学习 人工智能 PyTorch
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
本文以 MNIST 手写数字识别为切入点,介绍了深度学习的基本原理与实现流程,帮助读者建立起对神经网络建模过程的系统性理解。
808 15
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
|
6月前
|
机器学习/深度学习 数据采集 传感器
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
436 0
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 基础知识从 0.3 到 0.4——如何选对深度学习模型?
本系列文章从机器学习基础出发,逐步深入至深度学习与Transformer模型,探讨AI关键技术原理及应用。内容涵盖模型架构解析、典型模型对比、预训练与微调策略,并结合Hugging Face平台进行实战演示,适合初学者与开发者系统学习AI核心知识。
654 15
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习模型、算法与应用的全方位解析
深度学习,作为人工智能(AI)的一个重要分支,已经在多个领域产生了革命性的影响。从图像识别到自然语言处理,从语音识别到自动驾驶,深度学习无处不在。本篇博客将深入探讨深度学习的模型、算法及其在各个领域的应用。
1567 3

推荐镜像

更多