01 torch模块
激活函数
- Sigmoid (
torch.sigmoid ) - ReLU (
torch.relu ) - Tanh (
torch.tanh )
张量
- 矩阵的乘法 (
torch.mm ) - 张量元素的选择 (
torch.select )
能够产生一定形状的张量
torch.zeros 产生元素全为0的张量torch.randn 产生元素服从标准正态分布的张量
02 torch.Tensor模块
torch.Tensor 模块定义了torch中的张量类型,其中的张量有不同的数值类型,如单精度、双精度浮点、整数类型等,而且张量有一定的维数和形状。
同时,张量的类中也包含着一系列的方法,返回新的张量或者更改当前的张量。
这里需要提到一一点,如果张量的某个类方法会返回张量,按照PyTorch中 的命名规则,如果张量方法后缀带下画线,则该方法会修改张量本身的数据,反之则会返回新的张量。
比如,
Tensor.add 方法会让当前张量和输入参数张量做加法,返回新的张量,Tensor.add_ 方法会改变当前张量的值,新的值为旧的值和输入参数之和。
torch.Storage 则负责torch.Tensor底层的数据存储,即前面提到的为一个张量 分配连续的一维内存地址(用于存储相同类型的一系列元素,数目则为张量的总元素数目)。
03 torch.sparse模块
定义稀疏张量
04 torch.cuda模块
定义了与cuda运算相关的一系列函数,如
- 检查系统的CUDA是否可用,
- 当前进程对应的GPU序号(在多GPU情况下),
- 清除GPU上的缓存,
- 设置GPU的计算流( Stream) ,
- 同步GPU上执行的所有核函数(Kernel)等。
05 torch.nn模块
是PyTorch神经网络模块化的核心。这个模块定义了一系列模块,包括:
- 卷积层
nn.ConvNd (N=1, 2,3) - 线性层(全连接层)
nn.Linear - 等
torch.nn中也定 义了一系列的损失函数,包括:
- 平方损失函数(
torch.nn.MSELoss ) - 交叉熵损失函数(
torch.nn.CrossEntropyLoss ) - 等
一般来说,torch.nn 里定义的神经网络模块都含有参数,可以对这些参数使用优化器进行训练。
当构建深度学习模型的时候,可以通过继承nn.Module 类并重写forward 方法来实现一个新的神经网络。
06 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里面还定义了一些不常用的激活函数,包括
- torch.nn.functional.relu6
- torch.nn.functional.elu
- 等
07 torch.nn.init模块
定义了神经网络权重的初始化。
如果初始的神经网络权重取值不合适,就会导致后续的优化过程收敛很慢。
这个模块中的函数就是为了解决神经网络权重的初始化问题,其中使用了很多初始化方法,包括
- 均匀初始化
torch.nn.init.uniform_ - 正态分布归一化
torch.nn.init.normal 等
在PyTorch中函数或者方法如果以下画线结尾,则这个方法会直接改变作用张量的值。 因此,这些方法会直接改变传入张量的值,同时会返回改变后的张量。
07 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 等。
09 torch.autograd模块
是PyTorch的自动微分算法模块
定义了一系列的自动微分函数,包括:
torch.autograd.backward 函数, 主要用于在求得损失函数之后进行反向梯度传播,torch.autograd.grad 函 数用于一个标量张量(即只有一个分量的张量)对另一个张量求导,以及在代码中设置不参与求导的部分。
另外,这个模块还内置了数值梯度功能和检查自动微分引擎是否输出正确结果的功能。
10 torch.distributed模块
分布计算模块
11 torch.distributions模块
提供了一系列类,使得PyTorch能够对不同的分布进行采样,并且生成概率采样过程的计算图。 常应用于强化学习中
12 torch.hub模块
torch.hub提供了一系列预训练的模型供用户使用。
比如,
- 可以通过
torch.hub.list 函数来获取某个模型镜像站点的模型信息。 - 通过
torch.hub.load 来 载入预训练的模型,载入后的模型可以保存到本地,并可以看到这些模型对应类支持的方法 - 更多torch.hub支持的模型可以参考PyTorch官网中的相关页面。
13 torch.jit模块
是PyTorch的即时编译器( Just-In-Time Compiler, JIT)模块。
这个模块存在的意义是把PyTorch的动态图转换成可以优化和序列化的静态图。
14 torch.multiprocessing模块
定义了PyTorch中的多进程API
15 torch.random模块
torch.random提供了一系列的方法来保存和设置随机数生成器的状态,包括:
get_rng_state 函数获取当前随机数生成器状态set_rng_state 函数设置 当前随机数生成器状态,manual _seed 函数来设置随机种子initial_ seed 函数来得到程序初始的随机种子。
因为神经网络的训练是一个随机的过程,包括数据的输入、权重的初始化都具有一定的随机性设置一个统一的随机种子可以有效地帮助我们测试不同结构神经网络的表现,有助于调试神经网络的结构。
16 torch.onnx模块
定义了PyTorch导出和载入ONNX格式的深度学习模型描述文件
17 一些PyTorch的辅助工具模块
torch.utils 提供了一系列的工具来帮助神经网络的训练、测试和结构优化。 这个模块主要包含以下6个子模块:
torch.utils.bottleneck 模块:可以用来检查深度学习模型中模块的运行时间,从而可以找到导致性能瓶颈的那些模块,通过优化那些模块的运行时间,从而优化整个深度学习模型的性能。torch.utils.checkpoint 模块:可以用来节约深度学习使用的内存。通过前面的介绍我们知道,因为要进行梯度反向传播,在构建计算图的时候需要保存中间的数据,而这些数据大大增加了深度学习的内存消耗。为了减少内存消耗,让迷你批次的大小得到提高,从而提升深度学习模型的性能和优化时的稳定性,我们可以通过这个模块记录中间数据的计算过程,然后丢弃这些中间数据,等需要用到的时候再重新计算这些数据。这个模块设计的核心思想是以计算时间换内存空间,当使用得当的时候,深度学习模型的性能可以有很大的提升。torch.utils.cpp_ extension 模块:定义了PyTorch的C++扩展,其主要包含两个类:CppExtension定义了使用C++来编写的扩展模块的源代码相关信息,CUDAExtension则定义了C++/CUDA编写的扩展模块的源代码相关信息。在某些情况下,用户可能需要使用C++实现某些张量运算和神经网络结构(比如PyTorch没有类似功能的模块或者PvTorch类似功能的模块性能比较低),PvTorch的C++扩展模块就提供了一个方法能够让Python来调用使用C++/CUDA编写的深度学习扩展模块。在底层上,这个扩展模块使用了pybind11,保持了接口的轻量性并使得PyTorch易于被扩展。在后续章节会介绍如何使用C++/CUDA来编写PyTorch的扩展。torch.utils.data 模块:引入了数据集(Dataset) 和数据载入器( DataLoader)的概念,前者代表包含了所有数据的数据集,通过索引能够得到某一条特定的数据,后者通过对数据集的包装,可以对数据集进行随机排列( Shuffle) 和采样(Sample),得到一系列打乱数据顺序的迷你批次。torch.utils.dlpacl 模块:定义了PyTorch张量和DLPack张量存储格式之间的转换,用于不同框架之间张量数据的交换。torch.utils.tensorboard 模块:是PyTorch对TensorBoard数据可视化工具的支持。TensorBoard原来是TensorFlow自带的数据可视化工具,能够显示深度学习模型在训练过程中损失函数、张量权重的直方图,以及模型训练过程中输出的文本、图像和视频等。TensorBoard的功能 非常强大,而且是基于可交互的动态网页设计的,使用者可以通过预先提供的一系列功能来输出特定的训练过程的细节(如某一神经网络层的权重的直方图,以及训练过程中某- . 段时间的损失函数等)。PyTorch支持TensorBoard可视化之后,在PyTorch的训练过程中,可以很方便地观察中间输出的张量,也可以方便地调试深度学习模型。
|