- Python 深度学习
- 吕云翔 刘卓然 关捷雄等编著
- 881字
- 2025-02-28 02:11:30
2.3 PyTorch
2.3.1 PyTorch简介
2017年1月,Facebook人工智能研究院(FAIR)团队在GitHub上开源了PyTorch,并迅速占领了GitHub热度榜榜首。
作为一个2017年发布,具有先进设计理念的框架,PyTorch的历史可追溯到2002年诞生于纽约大学的Torch。Torch使用Lua语言作为接口。Lua语言简洁高效,但由于其过于小众,以至于很多人听说要掌握Torch必须新学一门语言就望而却步(其实Lua是一门比Python还简单的语言)。
考虑到Python在计算科学领域的领先地位,以及其生态完整性和接口易用性,几乎任何框架都不可避免地要提供Python接口。终于,在2017年,Torch幕后团队推出了PyTorch。PyTorch不是简单地封装Lua Torch提供Python接口,而是对Tensor之上的所有模块进行了重构,并新增了最先进的自动求导系统,成为当下最流行的动态图框架之一。
2.3.2 PyTorch的特点
TensorFlow与Caffe都是命令式的编程语言,并且是静态的,即首先必须构建一个神经网络,然后重复使用同样的结构;如果想要改变网络的结构,就必须从头开始。但是PyTorch通过一种反向自动求导技术,可以让用户零延迟地任意改变神经网络的行为,尽管这项技术不是PyTorch独有,但目前为止它实现是最快的,这也是PyTorch对比TensorFlow最大的优势。
PyTorch的设计思路是线性、直观且易于使用的,当用户执行一行代码时,它会忠实地执行,所以当用户的代码出现Bug时,可以通过这些信息轻松快捷地找到出错的代码,不会让用户在Debug时因为错误的指向或者异步及不透明的引擎浪费太多时间。
PyTorch的代码相对于TensorFlow而言,更加简洁直观,同时相对于TensorFlow高度工业化且很难看懂的底层代码,PyTorch的源代码要友好很多且更易看懂。深入API理解PyTorch底层肯定是一件令人高兴的事。
2.3.3 PyTorch的最大优势
PyTorch最大优势是建立了动态的神经网络,可以非常容易地输出每一步的调试结果,相对于其他框架,调试十分方便。
如图2.10和图2.11所示,PyTorch是随着代码的运行逐步建立起来的,也就是说使用者并不需要在一开始就定义好全部的网络结构,而是可以随着编码的进行一点一点调试,相比于TensorFlow和Caffe的静态图而言,这种设计显得更加贴近一般人的编码习惯。

图2.10 动态图1

图2.11 动态图2
PyTorch的代码示例如图2.12所示,相比于TensorFlow、Caffe,其可读性更高,网络各层的定义与传播方法一目了然,甚至不需要过多的文档与注释,单凭代码就可以很容易理解其功能,因此成为许多初学者的首选。

图2.12 PyTorch代码示例