PyTorch 2-深度学习-模块
- 一: pytorch
- 二:pytorch 模块
-
- 1> torch.Tensor 模块
- 2> torch.nn模块
- 3> torch.nn.function模块
- 4> torch.random模块
- 5> torch.onnx模块
- 6> torch.sparse模块
- 7> torch.cuda模块
- 8> torch.nn.init模块
- 9> torch.optim模块
- 10> torch.autograd模块
- 11> torch.distributed模块
- 12> torch.distributions模块
- 13> torch.hub模块
- 14> torch.jit模块
- 15> torch.multiprocessing模块
- 16> PyTorch辅助工具模块
- 三: 流程demo
- 四:pytorch 注意技巧
- 五:pythorch其他
一: pytorch
1> pytorch 介绍
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序,它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy);2、包含自动求导系统的深度神经网络。
2> pytorch 作用
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序;
提供功能 | 介绍 |
---|---|
1 | 具有强大的GPU加速的张量计算(如NumPy) |
2 | 包含自动求导系统的深度神经网络 |
多开源框架(如TensorFlow、Caffe2、CNTK和Theano )采用静态计算图,而PyTorch采用动态计算图。 在静态计算图表中,必须先定义网络模型,然后运行,一次定义并运行多次。 动态计算图表可以在运行中定义,可以在运行时构建,多次构建并运行;
3> pytorch 优点
优势 | 介绍 |
---|---|
1 | PyTorch是相当简洁且高效快速的框架 |
2 | 设计追求最少的封装 |
3 | 设计符合人类思维,它让用户尽可能地专注于实现自己的想法 |
4 | 与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新 |
4> pytorch 流程
步骤 | 介绍 | - |
---|---|---|
1 | 准备数据 | 数据几乎可以是任何东西,在本文中,我们将创建一条简单的直线。 |
2 | 建立模型 | 创建一个模型来学习数据中的模式,将选择 损失函数、 优化器 来构建 训练过程。 |
3. | 将模型拟合到数据(训练) | 已经有了数据和模型,现在让模型尝试在(训练)数据中找到模式。 |
4 | 做出预测和评估模型(推理) | 模型在数据中找到了模式,将其预测与实际(测试)数据进行比较。 |
5 | 保存和加载模型 | 当想在其他地方使用模型,或者稍后再回来使用它时需要保存和加载模型。 |
6. | 完整过程 | 将以上所有内容结合起来。 |
二:pytorch 模块
激活函数:Sigmoid (torch.sigmoid)、ReLU (torch.relu)、Tanh (torch.tanh)
张量:矩阵的乘法 (torch.mm)、张量元素的选择 (torch.select)、产生一定形状的张量(torch.zeros产生元素全为0的张量、torch.randn产生元素服从标准正态分布的张量)
1> torch.Tensor 模块
torch.Tensor模块定义了torch中的张量类型,其中的张量有不同的数值类型,如单精度、双精度浮点、整数类型等,而且张量有一定的维数和形状;
class Tensor(torch._C._TensorBase):
...
...
memo[id(self)] = new_tensor
return new_tensor
# 返回新的张量或者更改当前的张量
other | 介绍 |
---|---|
Tensor.add | 方法会让当前张量和输入参数张量做加法,返回新的张量 |
Tensor.add_ | 方法会改变当前张量的值,新的值为旧的值和输入参数之和 |
torch.Storage | 负责torch.Tensor底层的数据存储,即前面提到的为一个张量 分配连续的一维内存地址(用于存储相同类型的一系列元素,数目则为张量的总元素数目) |
2> torch.nn模块
PyTorch神经网络模块化的核心。括:
卷积层nn.ConvNd (N=1, 2,3)
线性层(全连接层)nn.Linear
...
# 定义了一系列模块;
平方损失函数( torch.nn.MSELoss )
交叉熵损失函数( torch.nn.CrossEntropyLoss)
...
# 定义了一系列的损失函数,
当构建深度学习模型的时候,可以通过继承nn.Module类并重写forward方法来实现一个新的神经网络.
3> torch.nn.function模块
torch.nn.functional是PyTorch的函数模块.
torch.nn中定义的模块一般会调用torch.nn.functional里的函数,比如:
nn.ConvNd模块 (N=1, 2,3)会调用torch.nn.functional.convNd函数
(N=1,2,3)
# 定义了一些核神经网络相关的函数,包括卷积函数和池化函数等;
torch.nn.functional.relu6
torch.nn.functional.elu
# torch.nn.functional 里面还定义了一些不常用的激活函数
4> torch.random模块
torch.random提供了一系列的方法来保存和设置随机数生成器的状态;
方法 | 介绍 |
---|---|
get_rng_state | 获取当前随机数生成器状态 |
set_rng_state | 设置 当前随机数生成器状态, |
manual _seed | 来设置随机种子 |
initial_ seed | 来得到程序初始的随机种子 |
神经网络的训练是一个随机的过程,包括数据的输入、权重的初始化都具有一定的随机性设置一个统一的随机种子可以有效地帮助我们测试不同结构神经网络的表现,有助于调试神经网络的结构。
5> torch.onnx模块
定义了PyTorch导出和载入ONNX格式的深度学习模型描述文件
6> torch.sparse模块
7> torch.cuda模块
定义了与cuda运算相关的一系列函数,
定义 | 作用 |
---|---|
1 | 检查系统的CUDA是否可用, |
2 | 当前进程对应的GPU序号(在多GPU情况下), |
3 | 清除GPU上的缓存, |
4 | 设置GPU的计算流( Stream) , |
5 | 同步GPU上执行的所有核函数(Kernel)等 |
8> torch.nn.init模块
定义了神经网络权重的初始化;注意:如果初始的神经网络权重取值不合适,就会导致后续的优化过程收敛很慢。
模块 | 介绍 |
---|---|
torch.nn.init.uniform_ | 均匀初始化torch.nn.init.uniform_ |
torch.nn.init.normal | 正态分布归一化torch.nn.init.normal等 |
9> torch.optim模块
torch.optim模块定义了一系列的优化器;
模块 | 介绍 |
---|---|
torch.optim.SGD | 随机梯度下降算法 |
torch.optim.Adagrad | AdaGrad算法 |
torch.optim.RMSprop | RMSProp 算法 |
torch.optim.Adam | Adam算法 |
torch.optim.lr_ scheduler | 学习率衰减的算法的子模块 |
torch.optim.lr_ scheduler .StepLR | 学习率阶梯下降算法,学习率衰减算法 |
torch.optim.lr_ scheduler.CosineAnnealingLR | 余弦退火算法,学习率衰减算法 |
10> torch.autograd模块
是PyTorch的自动微分算法模块;定义了一系列的自动微分函数;这个模块还内置了数值梯度功能和检查自动微分引擎是否输出正确结果的功能;
自动微分函数 | 介绍 |
---|---|
torch.autograd.backward | 主要用于在求得损失函数之后进行反向梯度传播 |
torch.autograd.grad | 用于一个标量张量(即只有一个分量的张量)对另一个张量求导,以及在代码中设置不参与求导的部分 |
11> torch.distributed模块
分布计算模块
12> torch.distributions模块
提供了一系列类,使得PyTorch能够对不同的分布进行采样,并且生成概率采样过程的计算图。
常应用于强化学习中
13> torch.hub模块
torch.hub提供了一系列预训练的模型供用户使用。
模型 | 介绍 |
---|---|
torch.hub.list | 可以通过torch.hub.list函数来获取某个模型镜像站点的模型信息。 |
torch.hub.load | 通过torch.hub.load来 载入预训练的模型,载入后的模型可以保存到本地,并可以看到这些模型对应类支持的方法 |
14> torch.jit模块
是PyTorch的即时编译器( Just-In-Time Compiler, JIT)模块。作用把PyTorch的动态图转换成可以优化和序列化的静态图;
15> torch.multiprocessing模块
定义了PyTorch中的多进程API
16> PyTorch辅助工具模块
1. torch.utils
torch.utils提供了一系列的工具来帮助神经网络的训练、测试和结构优化;
子模块 | 介绍 |
---|---|
torch.utils.bottleneck模块 | 可以用来检查深度学习模型中模块的运行时间,从而可以找到导致性能瓶颈的那些模块,通过优化那些模块的运行时间,从而优化整个深度学习模型的性能。 |
torch.utils.checkpoint模块 | 可以用来节约深度学习使用的内存。通过前面的介绍我们知道,因为要进行梯度反向传播,在构建计算图的时候需要保存中间的数据,而这些数据大大增加了深度学习的内存消耗。为了减少内存消耗,让迷你批次的大小得到提高,从而提升深度学习模型的性能和优化时的稳定性,我们可以通过这个模块记录中间数 |