深度学习之模型优化:核心算法与案例实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5.3 PyTorch

Torch是纽约大学的一个机器学习开源框架,几年前在学术界非常流行。但是,由于其初始只支持小众的Lua语言,因此没有普及。后来随着Python的生态越来越完善,Facebook人工智能研究院推出了PyTorch并开源。

PyTorch不是简单地封装Torch并提供PyTorch接口,而是对Tensor以上的所有代码进行重构,同TensorFlow一样,增加了自动求导功能。PyTorch入门简单,上手快,堪比Keras;代码清晰,设计直观,符合人类直觉。其定位就是快速实验研究,所以可以直接用Python写新的网络层。后来Caffe2全部并入PyTorch,如今PyTorch已经成为非常流行的框架。很多新的研究如风格化、GAN等大多采用PyTorch源码。

PyTorch的特点如下。

第一,动态图计算。TensorFlow采用静态图,先定义好图,然后在会话中运算。图一旦定义好后,是不能随意修改的。现在TensorFlow虽引入了动态图机制Eager Execution,但不如PyTorch直观。TensorFlow要查看变量结果,必须在会话中,会话的角色仿佛是C语言的执行,而之前的图定义是编译。相比之下,PyTorch就好像脚本语言,可以随时随地修改和调试,没有类似编译的过程,这比TensorFlow要灵活很多。

第二,简单。TensorFlow的学习成本不低,对于新手来说,Tensor、Variable、Session等概念充斥,数据读取接口更新频繁,tf.nn、tf.layers、tf.contrib各自重复;PyTorch则从Tensor到Variable再到nn.Module,分别就是从数据张量到网络的抽象层次的递进。

上述几大框架都有基本的数据结构,Caffe是Blob,TensorFlow和PyTorch是Tensor,都是高维数组。PyTorch中的Tensor使用与Numpy中的数组非常相似,两者可以互转且共享内存。PyTorch也为张量和Autograd库提供CUDA接口。使用CUDA GPU,不仅可以加速神经网络训练和推断,还可以加速任何映射至PyTorch张量的工作负载。通过调用torch.cuda.is_available()函数,可检查PyTorch中是否有可用CUDA。