本文内容
PyTorch 简介
如何入门 PyTorch
PyTorch 学习资料与进阶资源
PyTorch 简介
PyTorch是一个用于科学计算和深度学习的Python扩展库。它便于学习、编写和调试,支持灵活的动态计算图和GPU高速运算,具有完善的研发生态和技术社区。PyTorch于2017年由Facebook正式推出后,迅速引起了人工智能研发人员的关注,目前已成为最受重视的机器学习软件库之一。
PyTorch的优越性主要体现在以下方面:
1. 基于 Python API 构建动态计算图,既简单又灵活。
Python是一个易学易用的程序设计语言,而动态计算图与Python完美融合。计算图是科学计算逻辑的抽象,它有静态计算图和动态计算图两种模式。(1) 静态计算图:需要在实际计算前完全确定计算逻辑,之后按照编译好的计算逻辑来计算,计算过程中不能修改逻辑。(2) 动态计算图:计算逻辑的确定和实际计算过程没有先后限制,可以边计算边修改计算逻辑。动态图比静态图相比,更容易编程和调试,也更灵活。PyTorch的设计汲取了其他软件库(如Torch和Chainer等)的长处,从诞生之初就自带动态图基因,绕过了其他机器学习库(如Tensorflow)走过的弯路,以简洁清爽的姿态呈现在开发人员面前。
另外,PyTorch科学计算支持GPU加速,所以在GPU的配合下它的计算速度比其他科学计算库(如numpy)更快。
2. 完善而优雅的官方文档,顶尖团队维护,完善的技术社区。
PyTorch的文档由其开发团队亲自操刀,既有全面完整的API文档,又有详略得当的官方教程。其文档的质量大大优于某些其他机器学习库(如Tensorflow)。在API文档方面,该文档完整介绍了所有模块、所有类和所有函数,每个模块都有解说,大多数类和独立函数都带有使用范例,每个函数参数都有有实际意义的解释。在官方教程方面,为初级开发者、中级开发者、高级开发者都提供了完整而有逻辑性的教程。在雅俗共赏的同时,能让各级别的开发者都能很快上手并发挥出PyTorch强大的功能。值得一提的是,PyTorch的文档和教程在中国内地可以正常访问,这为有效而及时的查阅带来了便利。
PyTorch由世界顶尖的Facebook的人工智能实验室FAIR亲自操刀研发,目前仍在积极更新中。2018年即将发布的PyTorch 1.0可以看作PyTorch更新的里程碑,它使得PyTorch在研发环节和生产环节都游刃有余。目前已有许多库基于PyTorch或与PyTorch良好交互,包括进行图像处理的torchvision、用于文字处理的translate、用于概率运算和推断的Pyro等。PyTorch ignite针对神经网络这一特殊机器学习模型,进一步提供了PyTorch更高层次的API。PyTorch还可以通过其原生支持的ONNX库与多个主流深度学习库进行互操作。
笔者认为,机器学习初学者应该使用最简单易学的PyTorch作为机器学习入门;机器学习高级研究人员也应该使用灵活敏捷的PyTorch作为首选研发工具。PyTorch是机器学习研发的屠龙利器和事实标准。
如何入门 PyTorch
您只需要完成以下几个方面,即可入门PyTorch:
1. 搭建 PyTorch 开发环境。
工欲善其事,必先利其器。要入门PyTorch,必须搭建PyTorch开发环境。在Windows/macOS/Linux上搭建PyTorch开发环境非常简单。只需要安装最新版本的Anaconda 3,再在Anaconda命令提示符中输入PyTorch安装门户(https://pytorch.org/)中提供的一行命令就可以完成安装。具体安装方法,可以参见文章
PyTorch 0.4.1 安装命令大全
。
2. 阅读 PyTorch 入门教程。
访问并阅读PyTorch官方教程(http://pytorch.org/tutorials/),可在数十分钟内对PyTorch有较为完整的了解。
入门阶段应当重点理解的概念有:
张量(tensor)。在PyTorch中,张量(又称多维数组)是最基本的运算单元。可以进行加减乘除、乘法开方等科学运算。
自动梯度数值计算和优化求解。张量的可以运算可以反向传播,得到运算的梯度。例如对于张量 a = (1, 2, 3) 和张量 b = (4, 5, 6),它们的点积为 a.b = 1x4 + 2x5 + 3x6 = 4 + 10 + 18 = 32。PyTorch可以得到这个张量点积对a的梯度值,这个梯度值为 (4, 5, 6)。计算梯度值的逻辑已经由PyTorch提供,我们不需要显示指定梯度计算的逻辑。基于自动梯度数值计算,PyTorch提供了优化问题的数值求解器。
神经网络(netural network)和损失(loss)。神经网络是一些线性运算和非线性运算的组合。对于具有固定结构的神经网络,其权重系数不同,实现的功能也不同。为了让神经网络能够满足应用需求,我们引入了损失,把神经网络的权重设计转化为了一个最小化损失的优化问题。通过数值方法求解这个优化问题,有机会得到合适的神经网络权重。
3. 查阅 PyTorch API 文档。
在实际编程的过程中,难免需要查阅具体的API。您可以从官方的API文档(https://pytorch.org/docs/stable/index.html)查阅到所有开放的API。PyTorch有非常丰富的API,其中最常用、最基础的模块包括:
torch:这个模块主要进行张量的构造和科学计算。
torch.optim:这个模块包括求解优化问题需要的各种优化器。
torch.nn:这个模块包括各种神经网络的线性运算层和激活函数层,以及神经网络的损失。
PyTorch 学习资料和进阶资源
随着学习的深入,您可能需要更多的参考教程和资源。本节整理了网络上的相关资源。
除了学习资料与软件资源以外,如果您需要进行非常大量的计算,可能还需要考虑是否升级包括GPU在内的硬件资源。
1. PyTorch 资源
PyTorch安装门户(官方):
http://pytorch.org/
PyTorch API文档(官方):
http://pytorch.org/docs/master/
PyTorch教程(官方):
http://pytorch.org/tutorials/
PyTorch源代码(官方):
https://github.com/pytorch/pytorch
PyTorch论坛(官方):
https://discuss.pytorch.org/
除以上官方资料以外,网络上还有很多教程和项目。有些项目很好的总结了现有的资源。
PyTorch中文文档:
http://pytorch-cn.readthedocs.io/zh/latest
PyTorch教程和项目大全:
https://github.com/ritchieng/the-incredible-pytorch
PyTorch细分领域项目大全:
https://github.com/bharathgs/Awesome-pytorch-list
2. PyTorch-ignite 资源
PyTorch ignite是PyTorch官方提供的,为神经网络这一特定结构量身定制的高层API。
yTorch ignite文档(官方):
https://pytorch.org/ignite/
PyTorch ignite快速入门(官方):
https://pytorch.org/ignite/quickstart.html
PyTorch ignote源代码(官方):
http://github.com/pytorch/ignite
3. Pyro 资源
Pyro是Uber推出的,基于PyTorch的概率编程库。
Pyro安装门户(官方):
http://pyro.ai/
Pyro API文档(官方):
http://docs.pyro.ai/en/latest/
Pyro示例教程(官方):
http://pyro.ai/examples/
Pyro技术论坛(官方):
Pyro源代码(官方):
http://github.com/uber/pyro/
4. 其他开源项目库
torchvision(图片处理):
https://github.com/pytorch/vision
translate(机器翻译):
https://github.com/pytorch/translate
ONNX(与其他模型互操作):
https://github.com/onnx/onnx
visdom(可视化):
https://github.com/facebookresearch/visdom
pytorch-seq2seq(序列处理):
https://github.com/IBM/pytorch-seq2seq
好书推荐:《神经网络与PyTorch实战》
介绍神经网络的基本原理,以及如何用 PyTorch 搭建人工神经网络。
领取专属 10元无门槛券
私享最新 技术干货