机器学习利器 PyTorch

本文内容

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 搭建人工神经网络。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180823G1QMWE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券