pytorch(一)——与caffe ,TensorFlow的区别

本文全面介绍了深度学习领域的主要框架,包括PyTorch、TensorFlow、Keras、Caffe、MXNet、CNTK等,对比了它们的特点、优势与不足,探讨了动态图框架的兴起及其在深度学习研究中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 PyTorch简介

1.1 PyTorch的诞生
2017年1月, Facebook人工智能研究院 (FAIR) 团队在 GitHub上开源了PyTorch (PyTorch的Logo如图1-1所示),并迅速占 领GitHub热度榜榜首。 作为一个2017年才发布,具有先进设计理念的框架, PyTorch 的历史可追溯到2002年就诞生千纽约大学的Torch。 Torch使用了—种 不是很大众的语言Lua作为接口。 Lua简洁离效,但由千其过千小众, 用的入不是很多,以至千很多人听说要棠握Torch必须新学—门语言就 望而却步(其实Lua是—门比Python还简单的语言)。
考虑到Python在计算科学领域的领先地位,以及其生态完整性 和接口易用性,几乎任何框架者阴芍I避免地要提供Python接口。终千, 在2017年, Torch的藉后团队推出了PyTorch。 PyTorch不是简单地封装 Lua Torch提供Python接口,而是对Tensor之上的所有模块进行了里 构,并新增了最先进的自动求导系统,成为当下晟流行的动态图框架。
PyTorch—经推出就立刻引起了广泛关注,并迅速在研究领域 流行起来。 PyTorch自发布起关注度就在不 断上升,截至2017年10月18日, PyTorch的热度已然超越了其他三个框 架 (Caffe、 MXNe和Theano) , 并且其热度还在持续上升中。

1 .2 深度学习框架如雨后春笋般诞生千高校 和公司中。尤其是近两年, Google、 Facebook、 Microsoft等巨头都 围绕深度学习玺点投资了一系列新兴项目,他们也—直在支持—些开源 的深度学习框架。 目前研究人员正在使用的深度学习框架不尽相同,有 TensorFlow、 Caffe、 Theano、 Keras等,第见的深度学习框架如图 1-3所示。这些深度学习框架被应用千计算机视觉、语音沪别、自然语 言处理与生物信患学等领域,并获取了极好的效果。本节主要介绍当前 深度学习领域影响力比较大的几个框架,限千笔者个入使用经验和了解 程度,对各个框架的评价可能有不准确的地方。

1.2.1 Theano
Theano最初诞生千蒙特利尔大学LISA实验室,千2008年开始 开发,是第一个有较大影晌力的Python深度学习框架。 Theano是一个Python库,可用千定义、优化和计算数学表达 式,特别是多维数组 (numpy.ndarray) 。在解决包含大量数据的问题 时,使用Theano编程可实现比手写C语言更快的速度,而通过GPU加 速, Theano甚至可以比基千CPU计算的C语言快上好几个数量级。 Theano结合了计算机代数系统 (Computer Algebra System, CAS) 和优化编译器,还可以为多种数学运算生成定制的C语言代码。对千包 含玺鲤计算的要杂数学表达式的任务而言,计算速度很玺要,因此这种 CAS和优化编译器的组合是很有用的。对需要将每—种不同的数学表达 式都计算—遍的情况, Theano可以最小化编译/解析的计算蠹,但仍然 会给出如自动微分那样的符号特征。 Theano诞生千研究机构,服务于研究人员,其设计具有较浓 厚的学术气息但在工程设计上有较大的缺陷。一直以来, Theano因 难调试、构建图慢等缺点为人所话病。为了加速深度学习研究,人们在它的垂础之上,开发了Lasagne、 Blocks、 Pylearn2和Keras等第三方 框架,这些框架以Theano为基础,提供了更好的封装接口以方便用户 使用。 2017年9月28日,在Theano 1 .0正式版即将发布前夕, LISA 实验室负赍人,深度学习三巨头之一的Yoshua Bengio宣布Theano即 将停止开发: “Theano is Dead” 。尽管Theano即将退出历史舞台, 但作为第一个Python深度学习框架,它很好地完成了自己的使命,为深 度学习研究人员的早期拓荒提供了极大的帮助,同时也为之后深度学习 框架的开发奠定了垂本设计方向 : 以计算图为框架的核心,采用GPU加 速计算。 2017年11月, LISA实验室在GitHub上开启了一个初学者入门 项目,旨在帮助实验室新生快速掌握机器学习相关的实践基础,而该项 目正是使用PyTorch作为教学框架。

1.2.2 TensorFlow
2015年11月10日, Google宣布推出全新的机器学习开源工具 TensorFlow。 Tensor-Flow最初是由Google机器智能研究部门的 Google Brain团队开发,基千Google 2011年开发的深度学习基础架构 DistBelie韵建起来的。 TensorFlow主要用千进行机器学习和深度神经 网络研究,但它是一个非尝基础的系统,因此也可以应用千众多领域。 由千Google在深度学习领域的巨大影响力和强大的推广能力, TensorFlow—经推出就获得了极大的关注,并迅速成为如今用户最多的 深度学习框架。

TensorFlow在很大程度上可以吾作Theano的后继者,不仅因 为它们有很大一批共同的开发者,而且它们还拥有相近的设计理念,都 是基千计算图实现自动微分系统。 TensorFlow使用数据流图进行数值计 算,图中的节点代表数学运算,而图中的边则代表在这些节点之间传递 的多维数组(张霆)。

TensorFlo遠程接口支持Python和C+ +。随若1 .0版本的公 布,丿ava、 Go、邸[lHaskell API的alpha版本也被支持。此外, TensorFlow还可在Google Cloud和AWS中运行。 TensorFlow还支持 Windows 7、 Windows 10和Windows Server 2016。由千 TensorFlow使用C+ + Eigen库,所以库可在ARM架构上编译和优化。 这也就意昧巷用户可以在各种服务器和移动设备上部罢自己的训练模 型,无须执行单独的模型解码器或者加载Python解释器。 作为当前最流行的深度学习框架, TensorFlow获俜了极大的成 功,对它的批评也不绝千耳,总结起来主要有以下四点。

·过千锤杂的系统设计, TensorFlow在GitHub代码仓库的总 代码霆超过100万行。这么大的代码仓库,对千项目维护者来说维护成 为了一个难以完成的任务,而对i卖者来说,学习TensorFlow底层运行机 制更是一个极其痛苦的过程,并且大多数时候这种尝试以放弃告终。 ·频繁变动的接口。 TensorFlow的接口一直处千快速迭代之 中,并且没有很好地考虑向后茉容性,这导致现在许多开源代码已经无 法在新版的TensorFlow上运行,同时也间接导致了许多基千 TensorFlow的第三方框架出现BUG。 ·接口设计过千晦涩难懂。在设计TensorFlow时,创造了图、 会话、命名空间、 Place-Holder等诸多抽象概念,对音通用户来说难以 理解。同一个功能, TensorFlow提供了多种实现,这些实现良莞不齐, 使用中还有细微的区别,很容易将用户带入坑中。 ·文档混乱脱节。 TensorFlow作为一个舞杂的系统,文档和教 程众多,但缺乏明显的条理和层次,虽然查找很方便,但用户却很难找 到—个莫正循序渐进的入门教程。由千直接使用TensorFlow的生产力过 千低下,包括Google官方等众多开发者尝试 基千TensorFlow构建一个更易用的接口,包括Keras、 Sonnet、 TFLearn、 Tensorlayer、 Slim、 Fold、 Prettylayer等数不胜 数的第三方框架每隔几个月就会在新闻中出现—次,但是又大多归千沉 寂,至今TensorFlow仍没有一个统—易用的接口。

凭借Google巷强大的推广能力, TensorFlow已经成为当今最 炙手可热的深度学习框架,但是由千自身的缺陷, TensorFlow离最初的 设计目标还很遥远。另外,由千Google对TensorFlow略显严格的把 控,目前各大公司都在开发自己的深度学习框架。

1.2.3 Keras
Keras是一个离层神经网络API, 由纯Python编写而成并使用 TensorFlow、 Theano及CNTK作为后端。 Keras为支持快速实验而生, 能够把想法迅速转换为结果。 Keras应该是深度学习框架之中最容易上 手的一个,它提供了一致而简洁的API, 能够极大地减少一般应用下用 户的工作量,避免用户玺鲤造轮子。 严格意义上讲, Keras并不能称为一个深度学习框架,它更像 —个深度学习接口,它构建千第三方框架之上。 Keras的缺点很明显: 过度封装导致丧失灵活性。 Keras最初作为Theano的离级API而诞生, 后来增加了TensorFlo网[lCNTK作为后端。为了屏蔽后端的差异性,提 供一致的用户接口, Keras做了层层封装,导致用户在新增操作或是获 取底层的数据信患时过千困难。同时,过度封装也使得Keras的程序过 千缓慢,许多BUG都隐藏于封装之中,在绝大多数场景下, Keras是本 节介绍的所有框架中最慢的一个。 学习Keras十分容易,但是很快就会遇到瓶颈,因为它缺少灵 活性。另外,在使用Keras的大多数时间里,用户主要是在调用接口, 很难莫正学习到深度学习的内容。

1.2.4 Caffe/Caffe2
Caffe的全称是Convolutional Architecture for Fast Feature Embedding, 它是一个渭晰、离效的深度学习框架,核心语言是C+ +,它支持命令行、 Python和MATLAB接口,既可以在CPU上运行, 也可以在GPU上运行。
Caffe的优点是简洁快速,缺点是缺少灵活性。不同千Keras因 为太多的封装导致灵活性丧失, Caffe灵活性的缺失主要是因为它的设 计。在Caffe中最主要的抽象对象是层,每实现一个新的层,必须要利 用C+ +实现它的前向传播和反向传播代码,而如果想要新层运行在 GPU上,还需要同时利用CUDA实现这—层的前向传播和反向传播。这 种限制使俜不熟悉C+ +和CUDA的用户扩展Caffe十分困难。 Caffe凭借其易用性、简洁明了的源码、出众的性能和快速的 原型设计获取了众多用户,曾经占据深度学习领域的半壁江山。但是在 深度学习新时代到来之时, Caffe已经表现出明显的力不从心,诸多问 题逐渐显现(包括灵活性缺失、扩展难、依赖众多环境难以配置、应用 局限等)。尽管现在在GitHub上还能找到许多至千Caffe的项目,但是 新的项目已经越来越少。 Caffe的作者从加州大学伯克利分校毕业后加入了Google, 参 与过TensorFlow的开发,后来离开Google加入FAIR, 担任工程主管, 并开发了Caffe2。 Caffe2是一个菲具表现力、速度和模块性的开源深度 学习框架。它沿袭了大量的Caffe设计,可解决多年来在Caffe的使用和 部罢中发现的瓶颈问题。 Caffe2的设计追求轻量级,在保有扩展性和离 性能的同时, Caffe2也强调了便携性。 Caffe2从一开始就以性能、扩 展、移动端部罢作为主要设计目标。 Caffe2的核心C+ +库能提供速度 和便携性,而其Python和C+ +API使用户可以轻松地在Linux、 Windows、 iOS、 Android, 甚至Raspberry P和NVIDIA Tegra丘柱行 原型设计、训练和部署 Caffe2继承了Caffe的优点,在速度上令人印象深刻。 Facebook人工智能实验室与应用机器学习团队合作,利用Caffe2大幅 加速机器视觉任务的楼型训练过程,仅需1小时就训练完lmageNet这样 超大规模的数据里。然而尽管已经发布半年多,开发—年多, Caffe2仍 然是一个不太成熟的框架,官网至今没提供完整的文档,安装也比较麻 烦,编译过程时第出现异常在GitHub上也很少找到相应的代码。 极盛的时候, Caffe占据了计算机视觉研究领域的半壁江山,

虽然如今Caffe已经很少用千学术界,但是仍有不少计算机视觉相关的 论文使用Caffe。由千其稳定、出众的性能,不少公司还在使用Caffe部 罢模型。 Caffe2尽管做了许多改进,但是还远没有达到替代Caffe的地
止 ~o
点评:文档不够完善,但性能优异,几乎全平台支持 (Caffe2) , 适合生产环境。

1.2.5 MXNet MXNet是一个深度学习库,支持C+ +、 Python、 R、 Scala、丿ulia、 MATLAB及坛vaScript等语言;支持命令和符号编程; 可以运行在CPU、 GPU、里群、服务器、台式机或者移动设备上。 MXNet是CXXNet的下—代, CXXNet借鉴了Caffe的思想,但是在实现 上更干净。在201心F的NIPS上,同为上海交大校友的陈天奇与李沐碰 头,讨论到各自在做深度学习Toolkits的项目组,发现大家昔遍在做很 多玺要性的工作,例如文件loading等。千是他们决定组建DMLC (Distributied (Deep) Machine Learning Community) , 号召大 家—起合作开发MXNet, 发挥各自的特长,避免里舞造轮子。 MXNet以其超强的分布式支持,明显的内存显存优化为人所 称道。同样的模型, MXNet往往占用更小的内存和显存,并且在分布式 环境下, MXNet展现出了明显优千其他框架的扩展性能。 由千MXNet最初由一群学生开发,缺乏商业应用,极大地限制 了MXNet的使用。 2016年11月, MXNet被AWS阳艾选择为其云十算的 官方深度学习平台。 2017年1月, MXNe顷目进入Apache基金会,成 为Apache的孵化器项目。 尽管MXNet拥有最多的接口,也获得了不少人的支持,但其始 终处千一种不温不火的状态。个人认为这在很大程度上归结千推广不给 力及接口文档不够完善。 MXNet长期处千快速迭代的过程,其文档却长 时间未更新,导致新手用户难以棠握MXNet, 老用户第常需要查阅源码 才能莫正理解MXNet接口的用法。 为了完善MXNet的生态圈,推广MXNet, MXNet先后推出了包括MinPy、 Keras和Gluon等诸多接口,但前两个接口目前基本停止 了开发, Gluon模仿PyTorch的接口设计, MXNet的作者李沐更是亲自 上阵,在线讲授如何从零开始利用Gluon学习深度学习,诚意满满,吸 引了许多新用户。 点评:文档略混乱,但分布式性能强大,语言支持最多,适合
AWS云平台使用。

1.2.6 CNTK 2015年8月,微软公司在CodePlex上宣布由微软研究院开发的 计算网络工具栠CNTK将开源。 5个月后, 2016年1月25日,微软公司在 他们的GitHub仓库上正式开源了CNTK。早在201心F, 在微软公司内 部,黄学东傅士和他的团队正在对计算机能够理解语音的能力进行改 进,但当时使用的工具显然拖慢了他们的进度。千是,一组由志愿者组 成的开发团队构想设计了他们自己的解决方案,最终诞生了CNTK。 根据微软开发者的描述, CNTK的性能比Caffe、 Theano、 TensoFlow等主流工具者限躬虽。 CNT厄芝持CPU和GPU模式,和 TensorFlow/fheano—样,它把神经网络描述成一个计算图的结构,叶 子节点代表输入或者网络参数,其他节点代表计算步骤。 CNTK是一个 非第强大的命令行系统,可以创建神经网络预测系统。 CNTK最初是出 千在Microsoft内部使用的目的而开发的,一开始甚至没有Python接 口,而是使用了—种几乎没什么人用的语言开发的,而且文档有些晦涩 难懂,推广不是很给力,导致现在用户比较少。但就框架本身的质量而 言, CNT戏现摩噶均衡,没有明显的短板,并且在语音领域效果比 较突出。

1 .3 属千动态图的未来 2016年,随巷TensorFlow的如日中天,几乎所有人都觉得深 度学习框架之争接近尾声,但2017年却迎来了基千动态图的深度学习框 架的爆发。 几乎所有的框架都是基千计算图 。
的,而计图又可以分为静态计图和动态计图, 静态计图先定义再运行
, 一次定义多次运行,而动态计 图是在运行过程中被定义的, 在运行的时候构建 , 可以多次构建多次运行. Torch和Tensorflowl祁是基千计 图的深度学习框架, Torch使用的是动态图,而Tensorflo叫更用的是静态图.在 Torch中每一次前向传插每一次运行代码 都会创建一幅新的计算图,如图1 -4所示.

静态图—旦创建就不能修改,而且静态图定义的时候,使用了 特殊的语法,就像新学—门语言。这还意昧菩你无法使用if、 while、 for-loop等常用的Python语句。因此静态图框架不律不为这些操作专门设计语法,同时在构建图的时候必须把所有可能出现的情况都包含进 去,这也导致了静态图过千庞大,可能占用过离的显存。动态图框架就 没有这个问题,它可以使用Python的f、 while、 for-loop等条件语句, 最终创建的计算图取决千你执行的条件分支。 我们来吾看f条件语句在TensorFlowi泊PyTorch中的两种实现 方式,第一个利用PyTorch动态图的方式实现。

在这里插入图片描述

第二个利用TensorFlow静态图的方式实现。
在这里插入图片描述
在这里插入图片描述

可以看出, PyTorch的实现方式完全和Python的语法一致,简 洁直观;而TensorFlow的实现不仅代码冗长,而且十分不直观。 动态计算图的设计思想正被越来越多人所接受, 2017年1月20 日前后,先后有三款深度学习框架发布: PyTorch、 MinPQy,DyNet, 这三个框架都是基千动态图的设计模式。 PyTorch便是其中的佼佼者, 至今已成为动态图框架的代表。在PyTorch之前, Chainer就以动态图 思想设计框架,并获俜用户的—致好评,然而Chainer是由日本科学家 开发的,开发人员和文档都偏向千日本本土,没有很好地做推广。 PyTorch的发布让许多用户第—次发现原来深度学习框架可以如此灵 活、如此容易、还如此快速。

动态图的思想直观明了,更符合人的思考过程。动态图的方式
使得我们可以任意修改前向传播,还可以随时查春变量的值。如果说静
态图框架好比C+ +,每次运行都要编译才行 (session .run) , 那么动
态图框架就是Python, 动态执行,可以交互式查看修改。动态图的这个
特性使得我们可以在I Python和儿Jupyter Notebook上随时查香和修改变
量,十分灵活。
动态图带来的另外一个优势是调试更容易,在PyTorch中,代
码报错的地方,往往就是你写错代码的地方,而静态图需要先根据你的
代码生成Graph对象,然后在session.run ()时报错,这种报错几乎很
难找到对应的代码中莫正错误的地方。

静态图

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值