文章目录
简述PyTorch
Pytorch的安装
为了能够使用PyTorch,首先需要有Python的运行环境,一般来说推荐选择Anaconda的Python环境。
进入Anaconda官网针对操作系统和Python版本选择不同的Anaconda安装包下载安装。
安装好Anaconda后就可以使用conda命令了,这也是Anaconda的Python环境管理命令。Windows系统可以打开Anaconda Prompt,在命令行界面运行conda --help
,来查看Anaconda的帮助文件。
在安装好Anaconda后可以创建一个虚拟环境,具体的命令为conda create -n XXX python=3.7
。第一个参数是-n,后面紧跟着虚拟环境的名字,另一个参数指定Python的版本。Anaconda会自动安装好初始的依赖并设置好具体的环境变量。创建好环境后可以使用conda activate XXX
来激活创建好的虚拟环境。
在激活虚拟环境后,安装Pytorch包。
在使用GPU运行环境的情况下,使用命令conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
安装;在仅使用CPU的情况下,通过命令conda install pytorch torchvision -c pytorch
来安装。安装好后使用下面的命令测试PyTorch是否被正确安装。
PyTorch包的结构
PyTorch的主要模块
1.torch模块
torch模块本身包含了PyTorh经常使用的一些激活函数以及PyTorch张量的操作。
例如torch.sigmoid、torch.relu、torch.tanh以及torch.mm、torch.select、torch.zeros、torch.randn等。
2.torch.Tensor模块
这一模块定义了torch中的张量类型,包括不同的数值类型以及一定的维数和形状,同时也包含一些方法返回新的张量或者更改当前的张量。
值得注意的是如果张量的某个类方法会返回张量,如果张量方法后缀带下划线,则该方法会修改张量本身的数据,反之则会返回新的张量。 例如Tensor.add会让当前张量和输入参数张量做加法,返回新的张量;而Tensor.add_会改变当前张量的值,新的值为旧的值和输入参数之和。
3.torch.sparse模块
该模块定义了稀疏张量,用一个长整型定义非零元素的位置,用浮点数张量定义对应非零元素的值。稀疏张量之间可以做元素加、减、乘、除运算和矩阵乘法。
4.torch.cuda模块
该模块定义了与CUDA运算相关的一系列函数。
5.torch.nn模块
这是一个非常重要的模块,是PyTorch神经网络模块化的核心。这个模块定义了一系列模块,包括卷积层nn.ConvNd(N=1,2,3)和线性层nn.Linear等。
当构建深度学习模型时,可以通过继承nn.Module类并重写forward方法来实现一个新的神经网络。
另外torch.nn中也定义了一系列的损失函数,包括平方损失函数torch.nn.MSELoss、交叉熵损失函数torch.nn.CrossEntropyLoss等。
6.torch.nn.functional函数模块
该模块定义了一些和神经网络相关的函数,包括卷积函数和池化函数等。
7.torch.nn.init模块
该模块定义了神经网络权重的初始化,包括均匀初始化torch.nn.init.uniform_、正态分布归一化torch.nn.init.normal_等。和前文所述一致,这些函数或方法如果以下划线结尾则会直接改变作用张量的值,返回改变后的张量。
8.torch.optim模块
该模块定义了一系列优化器、学习率衰减算法的子模块等。
9.torch.autograd模块
该模块是PyTorch的自动微分算法模块,定义了一系列自动微分函数,包括torch.autograd.backward函数用于在求得损失函数之后进行反向梯度传播、torch.autograd.grad用于一个标量张量对另一个张量求导以及在代码中设置不参与求导的部分等。
10.torch.distributed模块
该模块是PyTorch的分布式计算模块提供并行运行环境。
11.torch.distributions模块
该模块提供了一系列类使得PyTorch能够对不同的分布式进行采样并且生成概率采样过程的计算图。
12.torch.hub模块
该模块提供了一系列预训练的模型供用户使用。
13.torch.jit模块
这一模块是PyTorch的即时编译器模块,可以将动态度转化为可以优化和序列化的静态图,通过预先定义好的张量追踪整个动态图的构建过程,得到最终构建出来的动态图,然后转换为静态图。
14.torch.multiprocessing模块
该模块定义了多进程API,可以启用不同的进程,每个进程运行不同的深度学习模型,并且能够在进程间共享张量。
15.torch.random模块
这一模块提供了一系列方法来保存和设置随机数生成器的状态,包括使用get_rng_state获取当前随机数生成器状态、set_rng_state设置当前随机数生成器状态、manual_seed设置随机种子等。
16.torch.onnx模块
该模块定义了导出和载入ONNX格式的深度学习模型描述文件。
PyTorch的辅助工具模块
torch.utils提供了一系列的工具帮助神经网络的训练、测试和结构优化,主要包括以下6个子模块:
1.torch.utils.bottleneck模块
这一模块用来检查深度学习模型中模块的运行时间,从而找到导致性能瓶颈的那些模块,通过优化这些模块的运行时间从而优化整个深度学习模型的性能。
2.torch.utils.checkpoint模块
这一模块可以用来节约深度学习使用的内存。因为要进行梯度反向传播,在构建计算图的时候需要保存中间数据,而这些数据大大增加了深度学习的内存消耗。为了减少内存消耗,让Mini-batch的大小提高,从而提升深度学习模型的性能和优化时的稳定性,可以使用这个模块来记录中间数据的计算过程。
3.torch.utils.cpp_extension模块
这一模块定义了C++扩展,包含CppExtension和CUDAExtension两个类。
4.torch.utils.data模块
这一模块引入了数据集和数据加载器的概念,前者代表了包含所有数据的数据集,通过索引能够得到某一条特定的数据,后者通过对数据集的包装,可以对数据集进行随机Shuffle和Sample,得到一系列打乱数据顺序的Mini-batch。
5.torch.utils.dlpacl模块
该模块定义了PyTorch张量和DLPack张量存储格式之间的转换,用于不同框架之间张量数据的交换。
6.torch.utils.tensorboard模块
这一模块是对TensorBoard数据可视化工具的支持,有了这一模块在训练过程中可以很方便的观察中间输出的张量,也可以方便地调试深度学习模型。