pytorch tutorial
pytorch的准备
安装流程
只需要在虚拟环境中安装cuda和cudnn即可,无需在真实环境中安装cuda和cudnn(所以请不要自作主张跟着网上的教程下载cuda和cudnn,已经试错)。
-
下载miniconda,创建虚拟环境(python=3.11)。
-
下载显卡驱动,选择LTS版本。
-
注意CUDA、pytorch、cuDNN、python、显卡驱动、系统的版本匹配,不要用最新版本,要用LTS版本,以防其中一方无匹配版本(在pytorch官网指令下载的cuda和pytorch版本匹配,若与显卡驱动版本不匹配可查看历史版本)。
-
在虚拟环境中下载对应版本的pytorch和一些所需要的库:numpy、pandas、matplotlib...
-
在虚拟环境中下载jupyter包。
下载成果检验
-
nvidia-smi
可以获得当前显卡的驱动信息与支持CUDA的最高版本信息。 -
nvcc -V
可以获得目前已安装的CUDA的信息。 -
在虚拟环境中的python下检查安装的pytorch、CUDA、cuDNN的信息:
import torch print(torch.__version__) # pytorch版本信息 print(torch.version.cuda) # cuda版本信息 print(torch.backends.cudnn.version()) # cudnn版本信息
pytorch核心讲解
pytorch核心模块
torch核心模块
-
_pycache_
文件夹:存放python解释器生成的字节码,后缀通常是pyc/pyo,节省了python语言转换成字节码的时间。 -
_C
文件夹:存放一系列pyi文件,检验数据类型,辅助C语言代码调用,pytorch底层计算代码由C++编写。 -
include
文件夹:存放C++代码,头文件用.h/.hpp文件存放,在python库中值包含头文件。 -
lib
文件夹:存放了大量的.lib和.dll文件(静态链接库和动态链接库),被各类顶层python api调用。 -
autograd
文件夹:pytorch的核心模块和概念,实现了梯度自动求导。 -
nn
文件夹:搭建网络的网络层存放模块。 -
onnx
文件夹:pytorch模型转换到onnx模型表示的核心模块,存放有大量的opse**.py文件。 -
optim
文件夹:优化模块,即存放优化使用的方法函数,以及学习率调整模块lr_scheduler.py
。 -
util
文件夹:包含各类常用工具,比如关键的data文件夹、tensorboard文件夹等等。
torchvision核心模块
-
datasets
文件夹:官方的常用数据集的数据读取函数。 -
models
文件夹:存放了经典的、可复现的、有训练权重参数可下载的视觉模型、分割模型、检测模型、视频任务模型、量化模型,可供调用和参考。 -
ops
文件夹:视觉任务特殊的功能函数。 -
transforms
文件夹:数据增强库,是pytorch自带的图像预处理、增强、转换工具(可满足日常需求,复杂需求可以使用Albumentations库)。
torchaudio核心模块
pytorch核心数据结构 —— Tensor
Tensor的介绍
-
Tensor即为张量。
-
pytorch中有两个有关张量的相关概念:
-
torch.Tensor
是tensor的类,也是pytroch中的基本操作单位,类似于np.array,但支持在GPU上进行计算。 -
torch.tensor
是创建张量的一个函数,用于将数据变为张量形式的数据。 -
但是一般用
tensor
表示张量这个数据结构。
-
-
在历史中Tensor需要经过Variable的包装才能实现自动求导,现torch.Tensor与torch.autograd.Variable已经合并,使得Tensor;拥有了跟踪历史操作的功能,虽然Variable仍可用,但Variable返回值是一个Tensor而非原来的Variable。
-
Vairiable不仅能对Tensor包装,而且还能记录生成Tensor的运算(自动求导的关键)。
-
Tensor的主要属性:
-
data
:多维数组,最核心的属性。 -
dtype
:多维数组的数据类型。 -
shape
:多维数组的形状。 -
device
:tensor所在设备,cpu或cuda。 -
grad
、grad_fn
,is_leaf
,requires_grad
:同Variable,是梯度计算中所用到的。
-
Tensor相关函数
直接创建tensor
-
直接创建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)
-
直接创建tensor函数:torch.from_numpy
将numpy数组转换为tensor,但是创建的tensor和原array共享同一块内存,即修改array或tensor数值,另一个都会改变。
torch.from_numpy(ndarray)
依数值创建tensor
-
创建全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)
-
创建全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参数代替此函数
-
创建全1和类似形状tensor:torch.ones、torch.ones_like
同上zeros与zeros_like,且ones_like也已不支持关键字参数。
-
创建全填充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)
-
创建全填充类似形状tensor:torch.full_like
同上zeros和ones,仅多fill_value参数与memory_format参数(=troch.memory_format,所需内存格式),但支持正常关键词参数,并未废除。
-
创建等差的一维张量: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)
-
创建均分的一维张量: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)
-
创建对数均分的一维张量: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)
-
创建单位对角矩阵:torch.eye
''' 参数说明: n=int,矩阵的行数。 m=int,矩阵的列数,默认创建方阵。 ... ''' # 以下有值的为默认值 torch.eye(n, m=None, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
-
创建空(不进行初始化赋值)和类似形状空tensor:torch.empty、torch.empty_like
同上zeros与zeros_like,但支持正常关键词参数,并未废除。
-
创建空张量,但可设置其在内存中的存储方式:torch.empty_strided
''' 参数说明: stride=int tuple,张量存储在内存中的步长,即设置在内存中的存储方式。 ... ''' # 以下有值的为默认值 torch.empty_strided(size, stride, *, dtype=None, layout=None, device=None, requires_grad=False, pin_memory=False)