首先PyTorch本质上是Numpy的替代者,而且支持GPU、带有高级功能,可以用来搭建和训练深度神经网络。如果你熟悉Numpy、Python以及常见的深度学习概念(卷积层、循环层、SGD等),会非常容易上手PyTorch。而TensorFlow可以看成是一个嵌入Python的编程语言。你写的TensorFlow代码会被Python编译成一张图,然后由TensorFlow执行引擎运行。

一、全面性

随着PyTorch逐渐成熟,我预计这部分的差距会趋近于零。但目前,TensorFlow还是有一些PyTorch不支持的功能。它们是:

沿维翻转张量(np.flip, np.flipud, np.fliplr)检查无穷与非数值张量(np.is_nan, np.is_inf)快速傅里叶变换(np.fft)

这些TensorFlow都支持。另外,TensorFlow的contrib软件包中,有更多PyTorch没有的高级功能和模型。

二、序列化

两种框架下保存和加载模型都很简单。PyTorch有一个特别简单的API,可以保存模型的所有权重或pickle整个类。TensorFlow的Saver对象也很易用,而且为检查提供了更多的选项。

TensorFlow序列化的主要优点是可以将整个图保存为protocol buffer。包括参数和操作。然而图还能被加载进其他支持的语言(C++、Java)。这对于部署堆栈至关重要。理论上,当你想改动模型源代码但仍希望运行旧模型时非常有用。

PyTorch不仅仅是定义网络结构简单,而且还很直观灵活。静态图的网络定义都是声明式的,而动态图可以随意地调用函数(if,for,list什么的随便用),两者的差距不是一点点。网络的定义在任何框架中都应该是属于最基础最简单的一个内容,即使是接口繁多的tensorflow,通过不断的查文档,新手也能把模型搭起来或者是看懂别人的模型。

三、强大的社区

facebook的FAIR强力支持,FAIR是全球TOP3的AI研究机构。PyTorch论坛,文档,tutorial,一应俱全。FAIR的几位工程师更是全职维护开发,github上PyTorch每天都有许多pull request和讨论。

很难听到有谁说TF好用,最多是诸如谷歌支持,社区强大,文档完善,功能齐全等等。但是PyTorch你只要深度用过一段时间,就会喜欢上它的。很多人自来水安利PyTorch,当然不是facebook给钱,或者是博得多少点击量,真的是因为它太好用了。

四、简洁易懂的代码

一个框架你不懂源码,你就不能完全掌握它的运行原理,像tensorflow的`sess.run`简直就是个黑箱。而PyTorch几乎是我用过框架中源码最易懂的,任何一个操作,不论多么高级复杂,都能轻松地找到它对应tensor操作(Caffe/tinydnn也挺简洁的)

五、自定义扩展

两个框架都可以构建和绑定用C、C++、CUDA编写的自定义扩展。TensorFlow仍然需要更多的样板代码,尽管这对于支持多类型和设备可能更好。在PyTorch中,你只需为每个CPU和GPU编写一个接口和相应的实现。两个框架中编译扩展也是直接记性,并不需要在pip安装的内容之外下载任何头文件或者源代码。TG:li9047