全文共9175字,预计学习时长18分钟
本文作者是Facebook的机器学习/人工智能首席开发布道师,为其麾下的PyTorch团队助力,曾经是一名软件工程师。
值得注意的是,在之前,作者从未使用过PyTorch。他将用自己的亲身经历告诉你:PyTorch并不难学。
PyTorch内容集锦
PyTorch及其工作原理:
• PyTorch是Facebook开发的深度学习框架,用于快速灵活实验。这是一个基于Python的计算软件包,含有 C++后端API。
• PyTorch的Python前端有三个不同部分:
Torch
这是一个包含多维张量与数学运算的数据结构包。
Torch.nn
用于创建并训练神经网络。区域块的导入数据以张量形式传递。
例如:为处理图像而训练卷积神经网络时,可使用nn.conv2D模块(这一想法来自笔者同事塞斯)。
Torch.optim
该优化算法可训练神经网络。
例如:适用于初学者的SGD或适合进阶者的Adam等算法,都可训练神经网络(这个好例子也源自塞斯)。
Tensors(张量)
PyTorch的Tensors 与Numpy数组类似。不同之处在于,Tensors数据可以是单个数字,或一维矩阵(向量),或囊括各种数据的多维结构。
算梯度即求导(没错,机器学习即微积分)。求出张量的梯度,便可最大程度地规避错误。
梯度下降这一算法能有效实现错误最小化。错误由数据决定,而数据的分类也有适当与不适当之别。
通过梯度降低不当分类项目数。
张量最重要的特点即自动跟踪梯度。每个张量中的数据代表神经网路的连接层。这其中,有三点值得一提:
• 阶 (rank): 确定张量的维数。例如,向量为一阶。
• 形状 (shape): 行数和列数,表现形式为tensor. Size ([x]).
• 数据类型 (type): 给张量元素所指定的数据类型。
PyTorch的神经网络训练循环如下:确定目标函数、迭代输入其他数据、将数据运用于神经网络、执行梯度操作减少误差,将异常参数运用于神经网络。
在神经网络中重复迭代整个训练数据集即可。
C++ 后端
C++“后端”有五个不同部分。
• Autograd: 自动求导,即张量上的记录操作,进而生成自动求导图,基本上依据梯度张量求导。
• ATen: 张量及数学运算库。
• TorchScript: 连接TorchScript的JIT编译器与解释器的界面(JIT为“即时”)
• C++前端: 训练与评价机器学习模型的高级构造。
• C++ 扩展: 通过自定义C++与CUDA的例程扩展,扩展Python的API.
CUDA (计算机统一设备架构) 是由Nvidia推出的并行计算架构及应用程序界面 (API) 模型。
上述内容皆援引自维基百科,总的来说,CUDA常用于GPU上的各项操作。
GPU即图像处理器。可将其视为具有强大运算力的电脑。
“说好的概览呢?这些知识点简直让人摸不着头脑。”虽然上述内容的确晦涩难懂,但它们至关重要。
若想对相关知识有深入全面的了解,请参阅优达课程(https://classroom.udacity.com/courses/ud188)并阅读PyTorch docs(https://pytorch.org/docs/stable/index.html)这份资料,必能让你获益匪浅。
那份资料并不着眼于PyTorch的方方面面,而是帮助读者开始给GitPyTorch开源数据库贡献代码(https://github.com/pytorch/pytorch)。
在这份repo中,你可根据上述信息,自行推断大量所含文件夹的内容。
搭建开发环境
贡献任何代码之前,务必阅读CONTRIBUTING.md这份文档(https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md),切勿有所遗漏。这是笔者从血泪中总结出的教训。
若条件允许,无论是处理Python还是C++问题,最好都借助GPU。
还可采用其他途径(如AWS DLAMI或Nvidia Docker),这会显著提升运行速度。
作为初学者,笔者犯下的第一个错误就是在本地电脑上开工。由于本地电脑性能不够强大,各种令人困惑头疼的段错误也就层出不穷。
最终,笔者用SSH、MOSH、TMUX等登陆GPU服务器,效果极佳。如果想就此做好准备,可参阅以下博文:
• HPC上的GPU运算简介:安装GPU与SSH
https://sydney-informatics-hub.github.io/training.artemis.gpu/setup.html
• PyTorch必备——GPU
https://discuss.pytorch.org/t/solved-make-sure-that-pytorch-using-gpu-to-compute/4870
• GPU内存须知 </