Pytorch教程


第一章 PyTorch介绍及安装

1.1 PyTorch简介

​ ​ ​ ​ ​ ​ ​ ​ Facebook公司开发的PyTorch框架是端到端深度学习平台最受欢迎的框架,是一个由Python、C++和CUDA语言编写的免费开源软件库,被广泛用于计算机视觉、语音识别和自然语言处理等深度学习领域。PyTorch有两大优势:一是具有强大GPU加速的张量计算;二是包含自动求导系统的深度神经网络。
​ ​ ​ ​ ​ ​ ​ ​ PyTorch的前身可追溯到2002年诞生于纽约大学的Torch,Facebook人工智能研究院于2017年在GitHub上开源了PyTorch,并迅速占据GitHub热度榜榜首。

1.2 PyTorch安装

1.2.1 Windows系统安装

1. CPU版PyTorch

pip install torch

2. GPU版Pytorch
步骤一
​ ​ ​ ​ ​ ​ ​ ​ 检查是否有合适的GPU,若有需要安装CUDA与CuDNN;
步骤二
​ ​ ​ ​ ​ ​ ​ ​ 进入PyTorch官网,检查目前PyTorch支持的CUDA版本;

https://pytorch.org/get-started/locally/

在这里插入图片描述

步骤三
​ ​ ​ ​ ​ ​ ​ ​ 进入CUDA官网,点击CUDA Toolkit 11.8.0,下载Base installer并安装;

https://developer.nvidia.com/cuda-downloads

在这里插入图片描述
在这里插入图片描述
步骤四
​ ​ ​ ​ ​ ​ ​ ​ 进入CuDNN官网,登录账号,选择最新版,点击Base installe;
在这里插入图片描述
在这里插入图片描述
步骤五
​ ​ ​ ​ ​ ​ ​ ​ 解压cudnn压缩包,并将其复制到cuda安装路径下;
步骤六
​ ​ ​ ​ ​ ​ ​ ​ 下载torch、torchvision和torchaudio

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

1.2.2 Linux系统安装

1. CPU版PyTorch
待写
2. GPU版Pytorch
待写

第二章 PyTorch 基础编程

2.1 张量定义

  1. 张量的定义
    ​ ​ ​ ​ ​ ​ ​ ​ 张量(Tensor)是PyTorch的核心数据结构。张量的维度(dimension)也称为阶。零阶张量称为标量(scalar),1阶张量称为向量(vector),2阶张量称为矩阵(matrix),3阶以上的就直接称为张量。
     ​ ​ ​ ​ ​ ​ ​ Tensor类的shape属性和size()函数返回张量的具体维度分量。零阶张量,一般用于超参数、参数和损失函数。一阶张量用作神经网络偏置,以及神经网络各层的输入。二阶张量一般用作神经网络的批量输入和输出,以及线性神经元的权重参数。三阶张量通常用作图片表示,一张彩色图片的RGB这三个通道占一维,宽和高各占一维。四维张量通常在卷积神经网络中表示图像。一次输入到神经网络中进行训练的样本数目称为批大小。
  2. Tensor与Variable的差异
    ​ ​ ​ ​ ​ ​ ​ ​ 在PyTorch中,Tensor和Variable有一定的关系,但在最新的PyTorch版本中,Variable已经被弃用了。在早期版本的PyTorch中,Variable是一个用于自动求导的类,它封装了Tensor并提供了自动求导的功能。 当在计算图中使用Variable时,它会跟踪计算图的操作,并允许你对变量进行梯度计算。然而,从PyTorch 0.4.0版本开始,Variable被弃用了,因为自动求导的功能已经集成到了Tensor中。在当前版本的PyTorch中,Tensor是主要的数据类型。Tensor对象支持各种数学操作和函数,可以进行高效的计算和操作。而且,Tensor对象还具有自动求导的功能,可以通过设置requires_grad属性为True来跟踪操作并计算梯度。Variable与Tensor具体的数据结构如下图所示:
图 a Variable 图 b Tensor

1)Variable数据类型
 ​ ​ ​ ​ ​ ​ ​ 在pytorch 0.4.0版本之前,Variable是torch.autograd中的数据类型,主要用于封装Tensor,然后进行自动求导。Variable对象具有以下几个主要的属性:

  • data:被包装的Tensor对象,存储实际的数据。
  • grad:一个Tensor对象,存储data的梯度。在进行反向传播时,梯度将累积到grad中。
  • grad_fn:创建该Variable的函数(或操作)的引用。它是构建计算图的关键,用于实现自动求导。
  • requires_grad:一个布尔值,指示是否需要计算梯度。如果设置为True,则Variable将跟踪操作并计算梯度;如果设置为False,则不会计算梯度。
  • is_leaf:一个布尔值,指示该Variable是否是计算图中的叶子节点。叶子节点是由用户直接创建的Variable,而非通过计算得到的。

2)Tensor数据类型
 ​ ​ ​ ​ ​ ​ ​ 在PyTorch 0.4.0及以后的版本中,Tensor对象支持自动求导,并且Variable类已经被弃用。Tensor对象具有以下几个主要的属性:

  • dtype:表示张量的数据类型;
  • shape:表示张量的形状,以元组形式表示;
  • device:表示张量所在的设备,可以是GPU或CPU。如果张量位于GPU上,则可以利用GPU的并行计算能力来加速运算。

2.2 张量操作

2.2.1 创建张量

  1. 创建张量
    1)判断是否为PyTorch张量
    ​ ​ ​ ​ ​torch.is_tensor()函数可判断输入参数是否为PyTorch张量。
    import torch
    arr = [1, 2, 3]
    print(torch.is_tensor(arr))
    
    运行结果如下:
    False
    
    2)从Python列表中创建张量
    ​ ​ ​ ​ ​torch.tensor()函数可直接从python列表中创建PyTorch张量。
    import torch
    arr = [1, 2, 3]
    t1 = torch.tensor(arr)
    print(f"t1是否为张量:{
           torch.is_tensor(t1)}")
    print(f"t1中的数据:{
           t1}")
    
    运行结果如下:
    t1是否为张量:True
    t1中的数据:tensor([1, 2, 3])
    
    3)初始化全0或全1张量
    ​ ​ ​ ​ ​torch.ones()函数和torch.zeros()函数分别创建全1或全0张量。
    import torch
    t = torch.ones(5)
    t1 = torch.zeros(5, 6)
    print(f"t中的数据:{
           t}")
    print(f"t1中的数据:{
           t1}")
    
    运行结果如下:
    t中的数据:tensor([1., 1., 1., 1., 1.])
    t1中的数据:tensor([[0., 0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0., 0.]])
    
    4)创建随机数张量
    ​ ​ ​ ​ torch.randn()函数用于创建正态分布的随机张量,torch.rand()函数用于创建取值在[0, 1)范围内的均匀分布的随机张量。
    import torch
    t = torch.randn(2, 3)  # 正态分布随机张量
    t1 = torch.rand(2, 1)   # 均匀分布随机张量
    print(f"t中的数据:{
           t}")
    print(f"t1中的数据:{
           t1}")
    
    运行结果如下:
    t中的数据:tensor([[-1.1226,  1.0770,  1.0084],
            [ 0.2833,  0.0693, -0.0252]])
    t1中的数据:tensor([[0.7664],
            [0.6271]])
    
    注意:由于输出的是随机数,所以可能每次运行的实际输出不同于上一次运行结果。
    5)创建二维对角矩阵张量
    ​ ​ ​ ​ torch.eye()函数用于创建二维对角矩阵张量,并不要求矩阵张量必须是方阵。
    import torch
    t = torch.eye(3)        # 创建3*3的对角张量
    t1 = torch.eye(2, 3)    # 创建2*3的对角张量
    print(f"t中的数据:{
           t}")
    print(f"t1中的数据:{
           t1}")
    
    运行结果如下:
    t中的数据:tensor([[1., 0., 0.],
            [0., 1., 0.],
            [0., 0., 1.]])
    t1中的数据:tensor([[1., 0., 0.],
            [0., 1., 0.]])
    
    6)创建一维序列张量
    ​​ ​ ​ ​ torch.arange()和torch.linspace()函数创建以为序列张量。torch.arange()函数输入参数start(默认参数0),end指定结束值,step(默认参数1)。
    import torch
    t = torch.arange(0, 30)
    t1 = torch.linspace(0, 30, 10)
    print(f"t中的数据:{
           t}")
    print(f"t1中的数据:{
           t1}")
    
    运行结果如下:
    t中的数据:tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
            18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
    t1中的数据:tensor([ 0.0000,  3.3333,  6.6667, 10.0000, 13.3333, 16.6667, 20.0000, 23.3333,
            26.6667, 30.0000])
    
    注意:torch.arange()函数输出的序列不包含end值;torch.linspace()函数输出的序列包含end值。
    7)创建取值为指定范围的随机置乱的张量
    ​ ​ ​ ​ torch.arange()函数生成0~n-1的整数的随机排列,常用于数据采集样本的随机置乱。
    import torch
    t = torch.randperm(10)
    print(f"t中的数据:{
           t}")
    
    运行结果如下:
    t中的数据:tensor([3, 1, 8, 4, 7, 6, 0, 2, 9, 5])
    
    8)numpy数组与张量相互转换
    ​ ​ ​ ​ torch.from_numpy()函数将Numpy数组转换为Tens
当然,我可以为您提供一些关于 PyTorch教程PyTorch 是一个广泛使用的深度学习框架,具有简单易用的API和灵活性。以下是一些入门教程和资源: 1. 官方文档:PyTorch 官方网站提供了详细的文档和教程,可以帮助您入门和深入了解 PyTorch 的各个方面。您可以在官网上找到教程、示例代码和API文档:https://pytorch.org/ 2. PyTorch 教程PyTorch 官方提供了一系列的教程,从基本概念到高级主题都有涉及。您可以按照自己的兴趣和需求选择适合您的教程:https://pytorch.org/tutorials/ 3. 《深度学习与PyTorch入门实战》:这是一本由李沐(PyTorch 的创始人之一)等人编写的教材,适合初学者入门。书中涵盖了基础的深度学习概念和 PyTorch 的使用方法,并提供了实战案例和代码示例。 4. 《PyTorch深度学习实践》:这是另一本关于 PyTorch 的教材,由尹成杰等人编写。书中介绍了深度学习的基本原理和 PyTorch 的使用方法,涵盖了图像分类、目标检测、生成对抗网络等应用场景。 5. GitHub 上的示例代码:许多开源项目和个人在 GitHub 上分享了使用 PyTorch 实现的深度学习模型和应用示例。您可以通过搜索关键词 "PyTorch examples" 或 "PyTorch tutorials" 来找到这些资源。 希望这些资源能够帮助您入门和学习 PyTorch!如果您有任何具体的问题或需要更深入的指导,请随时向我提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值