PyTorch深度学习实战 | 深度学习框架(PyTorch)

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最大的优势是建立的神经网络是动态的 , 可以非常容易地输出每一步的调试结果 , 相比于其他框架来说 , 调试起来十分方便 。
如图2.10和图2.11所示 , PyTorch的图是随着代码的运行逐步建立起来的 , 也就是说 , 使用者并不需要在一开始就定义好全部的网络结构 , 而是可以随着编码的进行来一点儿一点儿地调试 , 相比于TensorFlow和Caffe的静态图而言 , 这种设计显得更加贴近一般人的编码习惯 。
■图2.10动态图1
PyTorch深度学习实战 | 深度学习框架(PyTorch)
文章图片
■图2.11动态图2
PyTorch的代码如图2.12所示 , 相比于TensorFlow和Caffe而言显得可读性非常高 , 网络各层的定义与传播方法一目了然 , 甚至不需要过多的文档与注释 , 单凭代码就可以很容易理解其功能 , 也就成为许多初学者的首选 。
PyTorch深度学习实战 | 深度学习框架(PyTorch)