javaee论坛

普通会员

225648

帖子

344

回复

358

积分

楼主
发表于 2019-10-30 17:44:41 | 查看: 604 | 回复: 1

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

 

 

目录

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

1、Pytorch、Tensorflow代码比较

2、Pytorch、Tensorflow概念比较

 

 

 

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

先看两个框架实现同样功能的代码1、Pytorch、Tensorflow代码比较

DL框架之PyTorch:PyTorch的简介、安装、使用方法之详细攻略DL框架之Tensorflow:Tensorflow的简介、安装、使用方法之详细攻略DL:深度学习框架Pytorch、Tensorflow各种角度对比——案例代码实现

 

2、Pytorch、Tensorflow概念比较

     两种框架都在张量上运行,把任何模型都看作一个有向非循环图(DAG),但对于如何定义它们,PyTorch和TensorFlow区别很大。在便利性和上手难度上,PyTorch远胜于TensorFlow,原因是PyTorch是基于动态图,而TensorFlow是基于静态计算图,因此PyTorch能随时打印tensor的值,但是TensorFlow需要设置回调的方法才能打印,如果想在TensorFlow中想判断一个变量的值的正确性,只能使用assert方法,这一点确实TensorFlow不及PyTorch,而在上手难度上PyTorch也是比TensorFlow容易。

     TensorFlow遵循“数据即是代码,代码就是数据”的理念。在TensorFlow中,在跑模型之前会静态的定义图形。和外界的所有联系都是通过tf.Session对象和tf.Placeholder,它们都是会在模型运行被外部数据取代的张量。     在PyTorch中,会更动态一些:你可以随着进展定义、更改和执行节点,没有特殊的会话界面或占位符。     整体来看,PyTorch和Python结合的更紧凑些,多数时候会感觉更原生。而在TensorFlow里写东西时,有时你会觉得你的模型好像躲在一堵墙后面一样,就通过墙上的几个洞洞跟你交流。当然了,这也看每个人的喜好和品味。 PyTorch更适用于研究、爱好者和小规模项目的快速原型开发。TensorFlow更适合大规模部署,尤其是涉及跨平台和嵌入式部署时。

 

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在序列化方面的主要优势是整个计算图都可以保存为protocolbuffer。这既包括参数,也包括运算。然后这个图可以用其它支持的语言(C++、Java)加载。对于不支持Python的部署环境来说,这是非常重要的功能。而且理论上,这个功能也可以在你修改模型的源代码,但又想运行旧模型时为你提供帮助。

(5)、TensorFlow支持移动和嵌入式部署:但是在TensorFlow上,要将模型部署到安卓或iOS上需要不小的工作量,但至少你不必使用Java或C++重写你模型的整个推理部分。  1)、对于高性能服务器上的部署,还有TensorFlowServing可用。除了性能方面的优势,TensorFlowServing的另一个重要特性是无需中断服务,就能实现模型的热插拔。

(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要高一些。

 

PyTorch—FaceBook—像库、动态图、科研好手、小规模项目​​​​​​​

    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支持支持分布式执行、暂时不支持分布式训练:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


普通会员

0

帖子

319

回复

323

积分
沙发
发表于 2023-01-05 07:02:49

信春哥,得永生!

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017