Python|PyTorch到底好用在哪里?


Python|PyTorch到底好用在哪里?

文章图片


Python|PyTorch到底好用在哪里?

文章图片


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

【Python|PyTorch到底好用在哪里?】一、全面性
随着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安装的内容之外下载任何头文件或者源代码 。