Pytorch框架梳理

Pytorch 框架梳理

转载地址

1 Pytorch核心模块

1.1 torch

torch是框架的核心模块,主要包括一些激活函数,对tensor得操作以及构建新的张量

1.2 torch.Storage
负责 torch.Tensor 底层的数据存储。

假设一个 K 阶张量,它的维度是 (k1, k2, k3…,kn) ,由于计算机的内存是连续的地址空间,所以在实际存储过程中存储的是 1 维的向量,这个向量在内存中的大小为k1 * k2 * k3…*kn。其中 k1 为高纬, kn为低维。
在这里插入图片描述
1.3 torch.Tensor 张量

Pytorch 命名规则: 如果张量方法后缀带下划线,则该方法会修改张量本身的数据
 Tensor.add_ 如果张量方法后缀没有下划线,则该方法会返回一个新的张量Tensor.add
  • 16位整型 torch.ShortTensor
  • 32位整型 torch.IntTensor
  • 64位整型 torch.LongTensor
  • 16位浮点型 torch.HalfTensor
  • 32位浮点型 torch.FloatTensor
  • 64位浮点型 torch.DoubleTensor
  • torch.Tensor 默认 torch.FloatTensor

torch.tensor & torch.Tensor

torch.tensor() 只接收数据,且使用之前需要初始化,默认参数不确定,变化比较大
torch.Tensor() 接收 shape,接收数据时需要是 list[ ] 格式
常用属性

.dim() 维度(Dimension) 维度:2
.size & .shape 大小:[2,2]
.Tensor 张量:[1,2;3,4]
.numel 指 tensor 元素的个数

1.4 torch.nn

torch.nn 模块是一个非常重要的模块,是 Pytorch 神经网络模块化的核心,这个模块定义了一系列模块, - 包含了 卷积层(nn.ConvNd)、线性层(nn.Linear)等等。 - 另外 torch.nn 中也定义了一系列的损失函数。

当构建深度学习模型的时候,可以通过继承 nn.Module 类并重写 forward方法来实现一个新的神经网络。一般来说,torch.nn 里定义的神经网络模块都含有参数,可以对这些参数使用优化器进行训练。

1.5 torch.nn.init 权重初始化

定义了 神经网络权重的初始化。神经网络权重的初始值对神经网络的训练以及模型收敛有很大程度的影响。如果初始的权重取值不合适,重则导致后续的优化过程收敛很慢,甚至不收敛。

这个模块中的函数就是为了解决神经网络权重的初始化问题,其中使用了很多初始化方法 - 包含了均匀初始化 torch.nn.init.uniform_ 、正态分布归一化torch.nn.init.normal等

注意! 根据 Pytorch命名规则,如果以下划线结尾,则这个方法会直接改变作用张量的值,
因此,这些方法会直接改变传入张量的值,同时会返回改变后的张量。

1.6 torch.nn.functional 函数模块

torch.nn.functional 是Pytorch 的函数模块,定义了一些和神经网络相关的函数,包含了 - 卷积函数 - 池化函数 - 不常用的激活函数

注意! torch.nn 中定义的模块一般会调用 torch.nn.functional 里的函数,
比如 nn.ConvNd模块会调用 nn.functional.convNd 函数。

1.7 torch.optim 优化器

torch.optim 定义了一系列的优化器

  • torch.optim.SGD 随机梯度下降算法
  • torch.optim.Adagrad
  • torch.optim.RMSprop
  • torch.optim.Adam
  • torch.optim.lr_scheduler 学习率衰减算法 - 等

1.8 torch.cuda GPU加速

torch.cuda.is_available() # 判断设备是否支持GPU
torch.cuda 模块定义了与 CUDA运算相关的一系列函数,包括 - 检查系统 CUDA 是否可用 - 当前进程对应的 GPU序号 - 清除 GPU上的缓存 - 设置 GPU的计算流(Stream) - 同步 GPU上执行的所有核函数(Kernel)

1.9 torch.autograd 自动微分算法

torch.autograd 模块是 Pytorch 的自动微分算法模块,定义了一系列的自动微分函数 - torch.autograd.backward 函数,主要用于在求得损失函数之后进行反向梯度传播 - torch.autograd.grad 函数,用于一个标量对另一个张量求导,以及在代码中设置不参与求导的部分 - 等

1.10 torch.distributed 分布式计算

torch.distributed 是Pytorch 的分布式计算模块,主要功能是提供 Pytorch并行运行环境,其主要支持的后端有 MPI、Gloo、NCCL 三种。

Pytorch 的分布式工作原理主要是启动多个并行的进程,每个进程都拥有一个模型的备份,然后输入不同的训练数据到多个并行的进程,计算损失函数,每个进程独立地做反向传播,最后对所有进程权重张量的梯度做 归约(Reduce)。

用到后端的部分主要是数据的广播和数据的收集,其中前者是把数据从一个节点(进程)传播到另一个节点(进程)。Pytorch 的分布式计算模块不但提供了后端的一个包装,还提供了一些启动方式来启动多个进程,包括但不限于网络、共享文件等。

1.11 torch.hub 预训练模型

torch.hub 提供了一系列预训练的模型供用户使用。可以通过 torch.hub.list 函数来获取某个模型镜像站点的模型信息。通过 torch.hub.load 来载入预训练的模型,载入后的模型支持保存到本地。

1.12 torch.jit 即时编译器

torch.jit 是 Pytorch的即时编译器,这个模块存在的意义是:把 Pytorch 的动态图转换成可以优化和序列化的静态图,其主要工作原理是通过输入预先定义好的张量,追踪整个动态图的构建过程,得到最终构建出来的动态图,得到最终构建出来的动态图,然后转化为静态图。

通过 JIT 得到的静态图可以保存,并且被 Pytorch 其他的前端支持。另外, JIT 也可以用来生成其他格式的神经网络描述文件。

需要注意的一点是: torch.jit 支持两种模式:

  • 脚本模式
  • 追踪模式

前者和后者都能构成静态图,区别在于前者支持控制流,后者不支持,但是前者支持的神经网络模块比后者少。

1.13 torch.multiprocessing 多进程

torch.multiprocessing 定义了 Pytorch 中的多进程 API,通过使用这个模块,可以启动不同的进程,每个进程运行不同的深度学习模型,并且能够在进程间共享张量。共享的张量可以在 CPU上,也可以在 GPU上,多进程 API还提供了 与 Python原生的多进程 API相同的一系列函数,包括 Lock & Queue等。

1.15 torch.onnx 开放神经网络交换格式

torch.onnx 定义了 Pytorch 导出和加载 ONNX格式的深度学习模型描述文件。ONNX 格式的存在是为了方便不同深度学习框架之间交换模型。引入这个模块可以方便 Pytorch导出模型给其他深度学习框架使用,或者让 Pytorch可以载入其他深度学习框架构建的深度学习模型。

2、torch.utils 辅助模块

torch.utils 提供了一些列的辅助模块

2.1 torch.utils.data

torch.utils.data 引入了 数据集(Dataset)和数据加载起(DataLoader)的概念。

Dataset 包含了所有数据的数据集,通过索引能够得到某一条特定的数据;
DataLoader 通过对数据集的包装,可以对数据集进行随机排列(Shuffle)&采样(Sample),得到一系列打乱数据顺序的 小批量数据(BatchSize)

DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, 
batch_sampler=None, num_workers=0, collate_fn=None,pin_memory=False,
 drop_last=False, timeout=0, worker_init_fn=None)

2.2 torch.utils.tensorboard

Tensorboard 最初是 TensorFlow自带的数据可视化工具,能够显示深度学习模型在训练过程中损失函数、张量权重的直方图,以及模型训练过程中输出的图像等信息。Tensorboard 的功能非常强大,而且是基于可交互的动态网页设计的,可以通过预先提供的一系列功能来输出特定的训练过程的细节。

Pytorch 支持 Tensorboard 可视化之后,在 Pytorch 的训练过程中,可以很方便地观察中间输出的张量,也可以方便的调试深度学习模型。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值