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

目录

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

1、Pytorch、Tensorflow代码比较

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

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

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


​​​​​​​

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

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

1、Pytorch、Tensorflow代码比较

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

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

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

  • 在便利性和上手难度上,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 支持支持分布式执行暂时不支持分布式训练

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

  1. DL框架之PyTorch:深度学习框架PyTorch的简介、安装、使用方法之详细攻略

    DL框架之PyTorch:PyTorch的简介.安装.使用方法之详细攻略 DL框架之PyTorch:深度学习框架PyTorch的简介.安装.使用方法之详细攻略 目录 PyTorch的简介 1.pyto ...

  2. ArXiv最火深度学习框架:TensorFlow第一,PyTorch第二!|湾区人工智能

    一年不算短,但也不算长.一年时间,可以让Swift从11位跌倒13位,也可以让PyTorch从第4位飙升194%至第2位! PyTorch狂涨194%,逼近TensorFlow份额 UC伯克利RISE ...

  3. 深度学习入门笔记(十五):深度学习框架(TensorFlow和Pytorch之争)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  4. numpy pytorch 接口对应_拆书分享篇深度学习框架PyTorch入门与实践

    <<深度学习框架PyTorch入门与实践>>读书笔记 <深度学习框架PyTorch入门与实践>读后感 小作者:马苗苗  读完<<深度学习框架PyTorc ...

  5. 好书分享——《深度学习框架PyTorch:入门与实践》

    内容简介 : <深度学习框架PyTorch:入门与实践>从多维数组Tensor开始,循序渐进地带领读者了解PyTorch各方面的基础知识.结合基础知识和前沿研究,带领读者从零开始完成几个经 ...

  6. 深度学习框架PyTorch快速开发与实战

    深度学习框架PyTorch快速开发与实战 邢梦来,王硕,孙洋洋 著 ISBN:9787121345647 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时间:20 ...

  7. 一篇文章入门深度学习框架PyTorch

    一篇文章入门深度学习框架PyTorch 1 Tensor(张量) 2 Variable(变量) 3 Dataset(数据集) 4 nn.Module(模组) 5 torch.optim(优化) 一阶优 ...

  8. 深度学习框架之TensorFlow

    目录 TensorFlow 2015年11月10日,Google宣布推出全新的机器学习开源工具TensorFlow.TensorFlow最初是由Google机器智能研究部门的Google Brain团 ...

  9. 带你测试对比深度学习框架!TensorFlow,Keras,PyTorch...哪家强?(附数据集)

    授权自AI科技大本营(ID: rgznai100) 本文长度为3556字,建议阅读7分钟 亚马逊MXNet在CNN.RNN与NLP情感分析任务上性能强劲,而TensorFlow仅擅长于特征提取. 深度 ...

最新文章

  1. WINDOWS和LINUX下带时间的PING包监控脚本
  2. 中兴c600olt数据配置_中兴上架Blade 20smart孝心版
  3. 年薪50万美金的工程师到底牛在哪里?
  4. 【DND图形库】四、文本绘制和按键检测
  5. 追踪源码自定义负载均衡策略
  6. Shell中的if语句中的
  7. etc目录名字的意思---挖Linux中的古老缩略语
  8. C#配置及使用log4net
  9. 3+1保障:高可用系统稳定性是如何炼成的?
  10. ftp4j的android应用
  11. JNDI学习总结(一)——JNDI数据源的配置(转)
  12. CSS揭秘之多重边框连续的图像边框
  13. Atiti. Php Laravel 5.1 环境搭建以及  error 排除
  14. AR/VR learning (1)--artoolkit在android studio 上的配置
  15. 闲来无聊,随便看下asp.net Mvc 的收获
  16. 我的世界学园都市java_我的世界学园都市地图
  17. 斐讯k1潘多拉专版固件_斐讯路由器K2刷机-斐讯k1-k2华硕及潘多拉固件下载__飞翔下载...
  18. microsoft的罗马帝国——浪潮之巅
  19. 杠杆炒股亏盈计算方法?
  20. 好用简单、且永久免费的内网穿透工具

热门文章

  1. android简单小项目_烤面筋怎么做到年入20万?小成本!大收益!简单易操作的好项目!...
  2. warning: implicit declaration of function导致core
  3. spring源码深度解析—Spring的整体架构和环境搭建
  4. TCP:传输控制协议简单讲解(八)
  5. 内卷严重?加班多?给几条程序员都适用的建议
  6. 戳破微服务的七大谎言
  7. 老而不死的三种编程语言!
  8. 一站式解决使用枚举的各种痛点
  9. 线程池是怎样工作的?
  10. 操作系统:虚拟内存的定义及实现方式