pytorch tutorial

news/发布时间2024/5/4 12:38:27

pytorch tutorial

pytorch的准备

安装流程

只需要在虚拟环境中安装cuda和cudnn即可,无需在真实环境中安装cuda和cudnn(所以请不要自作主张跟着网上的教程下载cuda和cudnn,已经试错)。

  1. 下载miniconda,创建虚拟环境(python=3.11)。

  2. 下载显卡驱动,选择LTS版本。

  3. 注意CUDA、pytorch、cuDNN、python、显卡驱动、系统的版本匹配,不要用最新版本,要用LTS版本,以防其中一方无匹配版本(在pytorch官网指令下载的cuda和pytorch版本匹配,若与显卡驱动版本不匹配可查看历史版本)。

  4. 在虚拟环境中下载对应版本的pytorch和一些所需要的库:numpy、pandas、matplotlib...

  5. 在虚拟环境中下载jupyter包。

下载成果检验

  1. nvidia-smi可以获得当前显卡的驱动信息与支持CUDA的最高版本信息。

  2. nvcc -V可以获得目前已安装的CUDA的信息。

  3. 在虚拟环境中的python下检查安装的pytorch、CUDA、cuDNN的信息:

    import torch  
    print(torch.__version__) # pytorch版本信息  
    print(torch.version.cuda) # cuda版本信息  
    print(torch.backends.cudnn.version()) # cudnn版本信息  
    

pytorch核心讲解

pytorch核心模块

torch核心模块

  1. _pycache_文件夹:存放python解释器生成的字节码,后缀通常是pyc/pyo,节省了python语言转换成字节码的时间。

  2. _C文件夹:存放一系列pyi文件,检验数据类型,辅助C语言代码调用,pytorch底层计算代码由C++编写。

  3. include文件夹:存放C++代码,头文件用.h/.hpp文件存放,在python库中值包含头文件。

  4. lib文件夹:存放了大量的.lib和.dll文件(静态链接库和动态链接库),被各类顶层python api调用。

  5. autograd文件夹:pytorch的核心模块和概念,实现了梯度自动求导。

  6. nn文件夹:搭建网络的网络层存放模块。

  7. onnx文件夹:pytorch模型转换到onnx模型表示的核心模块,存放有大量的opse**.py文件。

  8. optim文件夹:优化模块,即存放优化使用的方法函数,以及学习率调整模块lr_scheduler.py

  9. util文件夹:包含各类常用工具,比如关键的data文件夹、tensorboard文件夹等等。

torchvision核心模块

  1. datasets文件夹:官方的常用数据集的数据读取函数。

  2. models文件夹:存放了经典的、可复现的、有训练权重参数可下载的视觉模型、分割模型、检测模型、视频任务模型、量化模型,可供调用和参考。

  3. ops文件夹:视觉任务特殊的功能函数。

  4. transforms文件夹:数据增强库,是pytorch自带的图像预处理、增强、转换工具(可满足日常需求,复杂需求可以使用Albumentations库)。

torchaudio核心模块

pytorch核心数据结构 —— Tensor

Tensor的介绍

  1. Tensor即为张量。

  2. pytorch中有两个有关张量的相关概念:

    • torch.Tensor是tensor的类,也是pytroch中的基本操作单位,类似于np.array,但支持在GPU上进行计算。

    • torch.tensor是创建张量的一个函数,用于将数据变为张量形式的数据。

    • 但是一般用tensor表示张量这个数据结构。

  3. 在历史中Tensor需要经过Variable的包装才能实现自动求导,现torch.Tensor与torch.autograd.Variable已经合并,使得Tensor;拥有了跟踪历史操作的功能,虽然Variable仍可用,但Variable返回值是一个Tensor而非原来的Variable。

  4. Vairiable不仅能对Tensor包装,而且还能记录生成Tensor的运算(自动求导的关键)。

  5. Tensor的主要属性:

    • data:多维数组,最核心的属性。

    • dtype:多维数组的数据类型。

    • shape:多维数组的形状。

    • device:tensor所在设备,cpu或cuda。

    • gradgrad_fnis_leafrequires_grad:同Variable,是梯度计算中所用到的。

Tensor相关函数

直接创建tensor
  1. 直接创建tensor函数:torch.tensor

    '''  
    参数说明:  
    - data=array_like,创建tensor的初始数据。  
    - dtype=None/torch.dtype,tensor的数据类型。  
    - device=None/torch.device,决定tensor位于cpu还是gpu。  
    - required_grad=Bool,决定是否需要计算梯度,推荐用torch.Tensor.requires_grad_()代替。  
    - pin_memory=Bool,是否将tensor存于锁页内存。  
    '''  # 以下有值的为默认值  
    torch.tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False)  
    
  2. 直接创建tensor函数:torch.from_numpy

    将numpy数组转换为tensor,但是创建的tensor和原array共享同一块内存,即修改array或tensor数值,另一个都会改变。

    torch.from_numpy(ndarray)  
    
依数值创建tensor
  1. 创建全0tensor:torch.zeros

    '''  
    参数说明:  
    - size=int sequence,决定形状。  
    - out=tensor,可以将函数返回的tensor赋给一个原有的tensor,使得两个变量名指向同一个张量(同一块内存)。  
    - layout=torch.layout,表明张量在内存中的布局方式。  
    ...  
    '''  # 以下有值的为默认值  
    torch.zeros(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)  
    
  2. 创建全0类似形状tensor:torch.zeros_like(现已不支持关键字参数,仅支持input,可以用zeros函数的out参数代替此函数)

    '''  
    参数说明:  
    - input=tensor,创建的tensor和input具有相同的形状。  
    ...  
    '''  # 以下有值的为默认值  
    torch.zeros_like(input, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format)  # 现已不支持关键字参数,仅支持input,可以用zeros函数的out参数代替此函数  
    
  3. 创建全1和类似形状tensor:torch.ones、torch.ones_like

    同上zeros与zeros_like,且ones_like也已不支持关键字参数。

  4. 创建全填充tensor:torch.full

    '''  
    参数说明:  
    - size=int sequence,决定形状。  
    - fill_value=scalar,填充tensor的值。  
    - out=tensor,可以将函数返回的tensor赋给一个原有的tensor。  
    ...  
    '''  # 以下有值的为默认值  
    torch.full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)  
    
  5. 创建全填充类似形状tensor:torch.full_like

    同上zeros和ones,仅多fill_value参数与memory_format参数(=troch.memory_format,所需内存格式),但支持正常关键词参数,并未废除。

  6. 创建等差的一维张量:torch.arange

    '''  
    参数说明:  
    start=int,数列起始值。  
    end=int,数列结束值。  
    step=int,数列等差值。  
    out=tensor,可以将函数返回的tensor赋给一个原有的tensor。  
    ...  
    '''  # 以下有值的为默认值  
    torch.arange(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)  
    
  7. 创建均分的一维张量:torch.linespace

    '''  
    参数说明:  
    start=int,数列起始值。  
    end=int,数列结束值。  
    step=int,数列长度。  
    ...  
    '''  # 以下有值的为默认值  
    torch.linspace(start, end, steps, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)  
    
  8. 创建对数均分的一维张量:torch.logspace

    '''  
    参数说明:  
    start=int,数列起始值为base^start。  
    end=int,数列结束值为base^end。  
    step=int,数列长度。  
    base=float,对数函数的底。  
    ...  
    '''  # 以下有值的为默认值
    torch.logspace(start, end, steps, base=10.0, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)  
    
  9. 创建单位对角矩阵:torch.eye

    '''  
    参数说明:  
    n=int,矩阵的行数。  
    m=int,矩阵的列数,默认创建方阵。  
    ...  
    '''  # 以下有值的为默认值
    torch.eye(n, m=None, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)  
    
  10. 创建空(不进行初始化赋值)和类似形状空tensor:torch.empty、torch.empty_like

    同上zeros与zeros_like,但支持正常关键词参数,并未废除。

  11. 创建空张量,但可设置其在内存中的存储方式:torch.empty_strided

    '''  
    参数说明:  
    stride=int tuple,张量存储在内存中的步长,即设置在内存中的存储方式。  
    ...  
    '''  # 以下有值的为默认值  
    torch.empty_strided(size, stride, *, dtype=None, layout=None, device=None, requires_grad=False, pin_memory=False)  
    
依概率分布创建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/33345605.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

【攻防实操系列】--JS①

“ 前 言 : 随着当前攻防水平的不断提高,实战攻防过程中,经常能遇到前端的参数被各种各样的方式加密的情况。毫无疑问,这种方式能够防止很多脚本小子的脚步,但是很多网站就存在“金玉其外,败絮其内“的情况,将传递的参数加密了事,忽略很多系统本身存在的安全风险。本文…

Springboot项目启动异常排查

一、问题由来 启动时报错信息如下: Property Detector custom Bean not found with name encryptablePropertyDetector 本地测试时,发现同样的问题。二、问题分析 把该问题对应的英文放在白发翻译里面,翻译结果如下, 未找到名为“encryptablePropertyDetector”的属性检测器…

C#-多线程

线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。 线程是**轻量级进程**。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节…

2-34. 绘制房子和可以被砍伐的树

绘制房子 首先将房子的下半部分绘制到 Group Top 这层然后把房顶绘制到 Front 1 这层绘制碰撞层可以被砍伐的树其中 Tree01_Bottom 是有阴影的树根,Tree01_Trunk 是没有阴影的树根 调整树根的锚点接着把树的上部分连接上去把树根和树干放到同一个父物体下面树遮挡人物变半透明…

易语言链接数据库

demo:本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18116036

每日一题:1026. 节点与其祖先之间的最大差值

给定二叉树的根节点 root,找出存在于 不同 节点 A 和 B 之间的最大值 V,其中 V = |A.val - B.val|,且 A 是 B 的祖先。 (如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)示例 1:输入:root = [8,3,10,1,6,null,14,null,null,…