PyTorch 深度学习实战 | 深度学习框架(PyTorch)
PyTorch 是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得 PyTorch 代码更易理解,对新手非常友好。
本文主要介绍深度学习框架中 PyTorch 部分。
1、PyTorch 简介
2017 年 1 月,Facebook 人工智能研究院(FAIR)团队在 GitHub 上开源了 PyTorch,并迅速占领 GitHub 热度榜榜首。
作为具有先进设计理念的框架,PyTorch 的历史可追溯到 Torch。Torch 于 2002 年诞生于纽约大学,它使用了一种受众面比较小的语言 Lua 作为接口。Lua 具有简洁高效的特点,但由于其过于小众,导致很多人听说要掌握 Torch 必须新学一门语言而望而却步。
考虑到 Python 在计算科学领域的领先地位,以及其生态的完整性和接口的易用性,几乎任何框架都不可避免地要提供 Python 接口。因此,Torch 的幕后团队推出了 PyTorch。PyTorch 不是简单地封装 Lua,Torch 提供 Python 接口,而是对 Tensor 之上的所有模块进行了重构,并新增了最先进的自动求导系统,成为当下最流行的动态图框架。
PyTorch 一经推出就立刻引起了广泛关注,并迅速在研究领域流行起来。PyTorch 自发布起关注度就在不断上升,截至 2017 年 10 月 18 日,PyTorch 的热度已然超越了其他三个框架(Caffe、MXNet 和 Theano),并且其热度还在持续上升中。
2、PyTorch 的特点
PyTorch 可以看作是加入了 GPU 支持的 Numpy。而 TensorFlow 与 Caffe 都是命令式的编程语言,而且它们是静态的,即首先必须构建一个神经网络,然后一次又一次使用同样的结构;如果想要改变网络的结构,就必须从头开始。但是 PyTorch 通过一种反向自动求导的技术,可以让用户零延迟地任意改变神经网络的行为,尽管这项技术不是 PyTorch 所独有,但到目前为止它的实现是最快的,这也是 PyTorch 对比 TensorFlow 最大的优势。
PyTorch 的设计思路是线性、直观且易于使用的,当用户执行一行代码时,它会忠实地执行,所以当用户的代码出现缺陷(bug)的时候,可以通过这些信息轻松快捷地找到出错的代码,不会让用户在调试(Debug)的时候因为错误的指向或者异步和不透明的引擎浪费太多的时间。
PyTorch 的代码相对于 TensorFlow 而言,更加简洁直观,同时对于 TensorFlow 高度工业化的很难看懂的底层代码,PyTorch 的源代码就要友好得多,更容易看懂。深入 API,理解 PyTorch 底层肯定是一件令人高兴的事。
3、PyTorch 概述
由于在后文中还会详细介绍 PyTorch 的特点,在此处就不详细介绍了。PyTorch 最大的优势是建立的神经网络是动态的,可以非常容易地输出每一步的调试结果,相比于其他框架来说,调试起来十分方便。
如图 1 和图 2 所示,PyTorch 的图是随着代码的运行逐步建立起来的,也就是说,使用者并不需要在一开始就定义好全部的网络结构,而是可以随着编码的进行来一点儿一点儿地调试,相比于 TensorFlow 和 Caffe 的静态图而言,这种设计显得更加贴近一般人的编码习惯。
■ 图 1 动态图 1
■ 图 2 动态图 2
PyTorch 的代码如图 3 所示,相比于 TensorFlow 和 Caffe 而言显得可读性非常高,网络各层的定义与传播方法一目了然,甚至不需要过多的文档与注释,单凭代码就可以很容易理解其功能,也就成为许多初学者的首选。
■ 图 3 PyTorch 代码示例
版权声明: 本文为 InfoQ 作者【TiAmo】的原创文章。
原文链接:【http://xie.infoq.cn/article/f8cc5cb7a2c981e659be9b4e8】。文章转载请联系作者。
评论