DL:深度学习框架Pytorch、 Tensorflow各种角度对比-阿里云开发者社区

开发者社区> 一个处女座的程序猿> 正文

DL:深度学习框架Pytorch、 Tensorflow各种角度对比

简介: DL:深度学习框架Pytorch、 Tensorflow各种角度对比
+关注继续查看

先看两个框架实现同样功能的代码


1、Pytorch、Tensorflow代码比较


DL框架之PyTorch:PyTorch的简介、安装、使用方法之详细攻略

DL框架之Tensorflow:Tensorflow的简介、安装、使用方法之详细攻略

DL:深度学习框架Pytorch、 Tensorflow各种角度对比——案例代码实现



2、Tensorflow(数据即是代码,代码就是数据)+Pytorch(随着进展定义、更改和执行节点)


        两种框架都在张量上运行,把任何模型都看作一个有向非循环图(DAG),但对于如何定义它们,PyTorch 和 TensorFlow 区别很大。


在便利性和上手难度上,PyTorch 远胜于TensorFlow ,

(1)、原因是PyTorch 是基于动态图,而TensorFlow 是基于静态计算图,因此PyTorch 能随时打印tensor的值,但是TensorFlow 需要设置回调的方法才能打印.

如果想在TensorFlow 中想判断一个变量的值的正确性,只能使用assert方法,这一点确实TensorFlow 不及PyTorch ,

上手难度上PyTorch 也是比TensorFlow 容易。

        TensorFlow 遵循“数据即是代码,代码就是数据”的理念。在 TensorFlow 中,在跑模型之前会静态的定义图形。和外界的所有联系都是通过 tf.Session 对象和 tf.Placeholder,它们都是会在模型运行被外部数据取代的张量。

        在 PyTorch 中,会更动态一些:你可以随着进展定义、更改和执行节点,没有特殊的会话界面或占位符。

        整体来看,PyTorch 和 Python 结合的更紧凑些,多数时候会感觉更原生。而在 TensorFlow 里写东西时,有时你会觉得你的模型好像躲在一堵墙后面一样,就通过墙上的几个洞洞跟你交流。当然了,这也看每个人的喜好和品味。 PyTorch 更适用于研究、爱好者和小规模项目的快速原型开发。TensorFlow 更适合大规模部署,尤其是涉及跨平台和嵌入式部署时。



3、TensorFlow —Google—像框架+静态图+公司好手,不易调试+额外概念(会话、图、变量范围、占位符),序列化更强大+支持移动和嵌入式部署+大规模分布式+强大的可视化工具


      PyTorch 开始会看起来很像一个框架。回想一下,编程框架会在特定领域为我们提供有用的抽象,用它们可以很方便的解决具体问题。而这是框架和库的的本质区别之处。


(1)、TensorFlow基于静态图:在 TensorFlow 中,图结构是静态的,也就是说图在「编译」之后再运行。需要先构建一个计算图,构建好了之后,这样一个计算图是不能够变的了,然后再传入不同的数据进去,进行计算。即固定了计算的流程,所以变得不太灵活。

   1)、如果要去改变计算的逻辑,或者随着时间变化的计算逻辑,这样的动态计算TensorFlow是实现不了的,或者是很麻烦。

(2)、TensorFlow不易调试:调试 TensorFlow 则没这么容易。它有两个选择,一是从会话中请求你想检查的变量,而是学会使用 TensorFlow 调试器(tfdbg)。

   1)、TensorFlow 则不同,你可以选择用一个叫 tfdbg 的特殊工具,它能让你在运行时评估 TensorFlow 表达式,浏览所有张量,在会话范围中操作。当然,无法用它调试 Python 代码,因此无需单独使用 pdb。

(3)、TensorFlow上手需学习额外概念—会话、图、变量范围、占位符:可以将 TensorFlow 看作是一种嵌入 Python 的编程语言。当你编写 TensorFlow 代码时,它会被 Python编译成图(graph),然后由 TensorFlow 执行引擎运行。

   1)、所以,TensorFlow 还有一些需要额外学习的概念,比如会话(session)、图、变量范围、占位符。要让基本的模型跑起来也需要更多样板代码。上手 TensorFlow 的时间肯定会比 PyTorch 长。


(4)、TensorFlow的序列化更强大:TensorFlow 的 Saver 对象也很容易使用,而且也为检查点提供了更多选择。TensorFlow 在序列化方面的主要优势是整个计算图都可以保存为 protocol buffer。这既包括参数,也包括运算。然后这个图可以用其它支持的语言(C++、Java)加载。对于不支持 Python 的部署环境来说,这是非常重要的功能。而且理论上,这个功能也可以在你修改模型的源代码,但又想运行旧模型时为你提供帮助。


(5)、TensorFlow 支持移动和嵌入式部署:但是在 TensorFlow 上,要将模型部署到安卓或 iOS 上需要不小的工作量,但至少你不必使用 Java 或 C++ 重写你模型的整个推理部分。

  1)、对于高性能服务器上的部署,还有 TensorFlow Serving 可用。除了性能方面的优势,TensorFlow Serving 的另一个重要特性是无需中断服务,就能实现模型的热插拔。


(6)、TensorFlow 的数据加载 比较复杂:我还没找到 TensorFlow 的非常有用的数据加载工具(读取器、队列、队列运行器等等)。部分原因是要将你想并行运行的所有预处理代码加入到 TensorFlow 图中并不总是那么简单直接(比如计算频谱图)。另外,TensorFlow 的 API 本身也更加冗长,学习起来也更难。


(7)、TensorFlow 的设备管理默认即可:设备管理的无缝性能非常好,通常你不需要指定任何东西,因为默认的设置就很好。比如说,TensorFlow 假设如果存在可用的 GPU,你就希望在 GPU 上运行。

   1)、TensorFlow 设备管理的唯一缺陷是它会默认占用所有可用的 GPU 上的所有内存,即使真正用到的只有其中一个。但也有一种简单的解决方案,就是指定 CUDA_VISIBLE_DEVICES。有时候人们会忘记这一点,就会让 GPU 看起来很繁忙,尽管实际上它们啥也没干。


(8)、TensorFlow的强大的可视化工具TensorBoard:TensorBoard 是一个用于可视化训练机器学习模型各个方面的工具。它是 TensorFlow 项目产出的最有用的功能之一。仅需在训练脚本中加入少许代码,你就可以查看任何模型的训练曲线和验证结果。TensorBoard 作为一个网页服务运行,可以尤其方便地可视化存储在 headless 节点上的结果。

  1)、展示模型图形、绘制标量变量、可视化分布和直方图、可视化图形  播放音频


(9)、TensorFlow持支持分布式执行、支持大规模分布式训练:在GPU的分布式计算上更为出色,在数据量巨大时效率比pytorch要高一些。



4、PyTorch —FaceBook—像库+动态图+科研好手,易理解且易调试+结合NumPy更易上手,小规模项目+支持分布式执行+暂时不支持分布式训练


      TensorFlow 给人的感觉更像是一个库,而非一个框架:所有的操作都为低阶操作,你需要写很多样板代码,即便你可能并不想写(比如,一遍又一遍的定义方差和权重···)。


(1)、PyTorch基于动态图:创建和运行计算图可能是这两个框架差别最大的地方。在 PyTorch 中,图结构是动态的,也就是说图是在运行时创建的。即就和python的逻辑是一样的,要对变量做任何操作都是灵活的。

(2)、PyTorch容易理解且易调试: 简单的图构建方式更容易理解,但也许更重要的是也更容易调试。调试 PyTorch 代码就跟调试 Python 代码一样。你可以使用 pdb,并且可以在任何地方设置断点。

  1)、 PyTorch 的计算图是在运行时定义,可以用 pdb,ipdb,PyCharm 这些 Python 调试工具或者以前的可靠的打印语句也行。

(3)、PyTorch结合NumPy更易上手:PyTorch 本质上是支持 GPU 的 NumPy 替代,配备了可用于构建和训练深度神经网络的更高级的功能。所以如果你熟悉 NumPy、Python 和常用的深度学习抽象(卷积层、循环层、SGD 等),那 PyTorch 就很容易学。

(4)、PyTorch序列化的API比较简单:在这两种框架中,保存和加载模型都很简单。PyTorch 有一个非常简单的 API,既可以保存模型的所有权重,也可以 pickle(加工)整个类。


(5)、PyTorch不支持移动和嵌入式部署:而包括 PyTorch 在内的很多深度学习框架都没有这个能力。


(6)、PyTorch的数据加载 API 设计得很好:数据集、采样器和数据加载器的接口都是特定的。数据加载器可以接收一个数据集和一个采样器,并根据该采样器的调度得出数据集上的一个迭代器(iterator)。并行化数据加载很简单,只需为数据加载器传递一个 num_workers 参数即可。


(7)、PyTorch 的设备管理必须指定:而在 PyTorch 中,你必须在启用了 CUDA 之后明确地将所有东西移到 GPU 上。


(8)、PyTorch 的可视化只能调用matplotlib 、seaborn等库:目前 PyTorch 并没有可以和 Tensorboard 匹敌的工具,不过倒是存在一些集成功能。虽然也能用一些绘图工具比如 matplotlib 和 seaborn


(9)、PyTorch 支持支持分布式执行、暂时不支持分布式训练:


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用Java部署TensorFlow和Keras训练好的深度学习模型的几种方法
使用Java部署TensorFlow和Keras训练好的深度学习模型的几种方法写在前面最近在一个自然语言处理方面的项目,选用的深度学习模型有两个,一个是CNN+LSTM模型,一个是GRU模型,这两个模型在GPU服务器上训练好了,然后需要使用Java调用这两个模型,CNN+LSTM使用TensorFlow写的,GRU是用Keras写的,所以需要用Java部署TensorFlow和Keras训练好的深度学习模型。
3945 0
DL之Keras: Keras深度学习框架的注意事项(默认下载存放路径等)、使用方法之详细攻略
DL之Keras: Keras深度学习框架的注意事项(默认下载存放路径等)、使用方法之详细攻略
8 0
iOS中 如何将自己的框架更新到cocopods上 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 为了更方便的集成第三方框架有了cocopods 的, 当我们有了相对比较好的框架的时候如何更新到cocopods 供他人参考呢? 下面我一步一步带大家开源自己的框架。
814 0
2019 深度学习框架大盘点!看 PyTorch、TensorFlow 如何强势上榜?
2019 深度学习框架大盘点!看 PyTorch、TensorFlow 如何强势上榜?
8 0
【翻译】Sklearn 与 TensorFlow 机器学习实用指南 —— 第11章 训练深层神经网络(中)
梯度裁剪 减少梯度爆炸问题的一种常用技术是在反向传播过程中简单地剪切梯度,使它们不超过某个阈值(这对于递归神经网络是非常有用的;参见第 14 章)。 这就是所谓的梯度裁剪。一般来说,人们更喜欢批量标准化,但了解梯度裁剪以及如何实现它仍然是有用的。
868 0
强大的PyTorch:10分钟让你了解深度学习领域新流行的框架
今年一月份开源的PyTorch,因为它强大的功能,它现在已经成为深度学习领域新流行框架,它的强大源于它内部有很多内置的库。本文就着重介绍了其中几种有特色的库,它们能够帮你在深度学习领域更上一层楼。
1648 0
【翻译】Sklearn与TensorFlow机器学习实用指南 ——第12章 设备和服务器上的分布式TensorFlow(下)
并行运行 当 TensorFlow 运行图时,它首先找出需要求值的节点列表,然后计算每个节点有多少依赖关系。 然后 TensorFlow 开始求值具有零依赖关系的节点(即源节点)。 如果这些节点被放置在不同的设备上,它们显然会被并行求值。
725 0
看深度学习框架排名第一的TensorFlow如何进行时序预测!
2017年深度学习框架关注度排名tensorflow以绝对的优势占领榜首,本文通过一个小例子介绍了TensorFlow在时序预测上的应用。
1512 0
实践操作:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器
TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型。 到目前为止,API的性能给我留下了深刻的印象。在这篇文章中,我将API的对象设定为一个可以运动的玩具。
2826 0
ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库
ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库。 与现有的主要针对监督任务设计的深度学习库不同,ZhuSuan 的特点是深入到贝叶斯推理中,从而支持各种生成模式:传统的分层贝叶斯模型和近代深层次的生成模式。
807 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载