深度学习主流框架都有什么?

2020-07-29 10:40发布

2条回答
aijingda
2楼 · 2020-07-29 11:00

目前是人工智能的时代,国内外像Google、微软、FaceBook、百度和华为等巨头公司纷纷投入较大的资源进行深度学习框架的研发和应用的拓展。表1列出了github上流行的深度学习框架的星数。

表1 github上流行的深度学习框架的星数

下面有侧重地介绍一下上表中列出的一些深度学习框架。

(一)TensorFlow

TensorFlow是用C++语言开发的,支持C、Java、Python等多种语言的调用,目前主流的方式通常会使用Python语言来驱动应用。这一特点也是其能够广受欢迎的原因。利用C++语言开发可以保证其运行效率,Python作为上层应用语言,可以为研究人员节省大量的开发时间。

TensorFlow相对于其他框架有如下特点。

1、灵活

TensorFlow与CNTK、MXNET、Theano同属于符号计算构架,允许用户在不需要使用低级语言(如在Caffe中)实现的情况下,开发出新的复杂层类型。基于图运算是其基本特点,通过图上的节点变量可以控制训练中各个环节的变量,尤其在需要对底层操作时,TensorFlow要比其他框架更容易。当然它也有缺点,灵活的操作会增加使用复杂度,从而在一定程度上增加了学习成本。

2、便捷、通用

作为主流的框架,TensorFlow生成的模型,具有便捷、通用的特点,可以满足更多使用者的需求。TensorFlow可以适用于Mac、Linux、Windows系统上开发。其编译好的模型几乎适用于当今所有的平台系统,并提满足“开箱即用”的模型使用理念,使模型应用起来更简单。

3、成熟

由于TensorFlow被使用的情况最多,所以其框架的成熟度绝对是第一的。在Google的白皮书上写道,Google内部有大量的产品几乎都用到了TensorFlow,如搜索排序、语音识别、谷歌相册和自然语言处理等。有这么多在该框架上的成功案例,先不说能够提供多少经验技巧,至少可以确保学习者在研究的道路上,遇到挫折时不会怀疑是框架的问题。

4、超强的运算性能

虽然TensorFlow在大型计算机集群的并行处理中,运算性能仅略低于CNTK,但是,其在个人机器使用场景下,会根据机器的配置自动选择CPU或GPU来运算,这方面做得更加友好与智能化。

(二)Caffe

当年深度学习的老大。最初是一个强大的图像分类框架,是最容易测试评估性能的标准深度学习框架,并且提供很多预训练模型,尤其该模型的复用价值在其他框架的学习中都会出现,大大提升了现有模型的训练时间。但是现在的Caffe似乎停滞不前,没有更新。尽管Caffe又重新掘起,从架构上看更像是TensorFlow,而且与原来的Caffe也不在一个工程里,可以独立成一个框架来看待,与原Caffe关系不大。

(三)CNTK

CNTK是一个微软开发的深度学习软件包,以速度快著称,有其独有的神经网络配置语言Brain Script,大大降低了学习门槛。有微软作为后盾,CNTK成为了最具有潜力与Tensor Flow争夺天下的框架。但目前其成熟度要比TensorFlow差太多,即便是发行的版本也会有大大小小的bug。与其他框架一样,CNTK具有文档资料不足的特点。但其与Visual Studio的天生耦合,以及其特定的MS编程风格,使得熟悉Visual Studio工具的小伙伴们从代码角度极易上手。另外,CNTK目前还不支持Mac操作系统。


卡卡
3楼 · 2020-10-22 10:41





常见的深度学习框架有TensorFlow、Caffe、Theano、Keras、PyTorch、MXNet等,如下图所示。这些深度学习框架被应用于计算机视觉、语音识别、自然语言处理与生物信息学等领域,并获取了极好的效果。下面将主要介绍当前深度学习领域影响力比较大的几个框架,内容出自书籍《深度学习框架PyTorch:入门与实践》。

常见的深度学习框架

Theano

Theano最初诞生于蒙特利尔大学LISA实验室,于2008年开始开发,是第一个有较大影响力的Python深度学习框架。

Theano是一个Python库,可用于定义、优化和计算数学表达式,特别是多维数组(numpy.ndarray)。在解决包含大量数据的问题时,使用Theano编程可实现比手写C语言更快的速度,而通过GPU加速,Theano甚至可以比基于CPU计算的C语言快上好几个数量级。Theano结合了计算机代数系统(ComputerAlgebraSystem,CAS)和优化编译器,还可以为多种数学运算生成定制的C语言代码。对于包含重复计算的复杂数学表达式的任务而言,计算速度很重要,因此这种CAS和优化编译器的组合是很有用的。对需要将每一种不同的数学表达式都计算一遍的情况,Theano可以最小化编译/解析的计算量,但仍然会给出如自动微分那样的符号特征。

Theano诞生于研究机构,服务于研究人员,其设计具有较浓厚的学术气息,但在工程设计上有较大的缺陷。一直以来,Theano因难调试、构建图慢等缺点为人所诟病。为了加速深度学习研究,人们在它的基础之上,开发了Lasagne、Blocks、PyLearn2和Keras等第三方框架,这些框架以Theano为基础,提供了更好的封装接口以方便用户使用。

2017年9月28日,在Theano1.0正式版即将发布前夕,LISA实验室负责人,深度学习三巨头之一的YoshuaBengio宣布Theano即将停止开发:“TheanoisDead”。尽管Theano即将退出历史舞台,但作为第一个Python深度学习框架,它很好地完成了自己的使命,为深度学习研究人员的早期拓荒提供了极大的帮助,同时也为之后深度学习框架的开发奠定了基本设计方向:以计算图为框架的核心,采用GPU加速计算。

2017年11月,LISA实验室在GitHub上开启了一个初学者入门项目,旨在帮助实验室新生快速掌握机器学习相关的实践基础,而该项目正是使用PyTorch作为教学框架。

点评:由于Theano已经停止开发,不建议作为研究工具继续学习。

TensorFlow

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

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

TensorFlow编程接口支持Python和C++。随着1.0版本的公布,Java、Go、R和HaskellAPI的alpha版本也被支持。此外,TensorFlow还可在GoogleCloud和AWS中运行。TensorFlow还支持Windows7、Windows10和WindowsServer2016。由于TensorFlow使用C++Eigen库,所以库可在ARM架构上编译和优化。这也就意味着用户可以在各种服务器和移动设备上部署自己的训练模型,无须执行单独的模型解码器或者加载Python解释器。

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

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

点评:不完美但最流行的深度学习框架,社区强大,适合生产环境。

Keras

Keras是一个高层神经网络API,由纯Python编写而成并使用TensorFlow、Theano及CNTK作为后端。Keras为支持快速实验而生,能够把想法迅速转换为结果。Keras应该是深度学习框架之中最容易上手的一个,它提供了一致而简洁的API,能够极大地减少一般应用下用户的工作量,避免用户重复造轮子。

严格意义上讲,Keras并不能称为一个深度学习框架,它更像一个深度学习接口,它构建于第三方框架之上。Keras的缺点很明显:过度封装导致丧失灵活性。Keras最初作为Theano的高级API而诞生,后来增加了TensorFlow和CNTK作为后端。为了屏蔽后端的差异性,提供一致的用户接口,Keras做了层层封装,导致用户在新增操作或是获取底层的数据信息时过于困难。同时,过度封装也使得Keras的程序过于缓慢,许多BUG都隐藏于封装之中,在绝大多数场景下,Keras是本文介绍的所有框架中最慢的一个。

学习Keras十分容易,但是很快就会遇到瓶颈,因为它缺少灵活性。另外,在使用Keras的大多数时间里,用户主要是在调用接口,很难真正学习到深度学习的内容。

点评:入门最简单,但是不够灵活,使用受限。

Caffe/Caffe2

Caffe的全称是ConvolutionalArchitectureforFastFeatureEmbedding,它是一个清晰、高效的深度学习框架,核心语言是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,甚至RaspberryPi和NVIDIATegra上进行原型设计、训练和部署。

Caffe2继承了Caffe的优点,在速度上令人印象深刻。Facebook人工智能实验室与应用机器学习团队合作,利用Caffe2大幅加速机器视觉任务的模型训练过程,仅需1小时就训练完ImageNet这样超大规模的数据集。然而尽管已经发布半年多,开发一年多,Caffe2仍然是一个不太成熟的框架,官网至今没提供完整的文档,安装也比较麻烦,编译过程时常出现异常,在GitHub上也很少找到相应的代码。

极盛的时候,Caffe占据了计算机视觉研究领域的半壁江山,虽然如今Caffe已经很少用于学术界,但是仍有不少计算机视觉相关的论文使用Caffe。由于其稳定、出众的性能,不少公司还在使用Caffe部署模型。Caffe2尽管做了许多改进,但是还远没有达到替代Caffe的地步。

点评:文档不够完善,但性能优异,几乎全平台支持(Caffe2),适合生产环境。

MXNet

MXNet是一个深度学习库,支持C++、Python、R、Scala、Julia、MATLAB及JavaScript等语言;支持命令和符号编程;可以运行在CPU、GPU、集群、服务器、台式机或者移动设备上。MXNet是CXXNet的下一代,CXXNet借鉴了Caffe的思想,但是在实现上更干净。在2014年的NIPS上,同为上海交大校友的陈天奇与李沐碰头,讨论到各自在做深度学习Toolkits的项目组,发现大家普遍在做很多重复性的工作,例如文件loading等。于是他们决定组建DMLC【Distributied(Deep)MachineLearningCommunity】,号召大家一起合作开发MXNet,发挥各自的特长,避免重复造轮子。

MXNet以其超强的分布式支持,明显的内存、显存优化为人所称道。同样的模型,MXNet往往占用更小的内存和显存,并且在分布式环境下,MXNet展现出了明显优于其他框架的扩展性能。

由于MXNet最初由一群学生开发,缺乏商业应用,极大地限制了MXNet的使用。2016年11月,MXNet被AWS正式选择为其云计算的官方深度学习平台。2017年1月,MXNet项目进入Apache基金会,成为Apache的孵化器项目。

尽管MXNet拥有最多的接口,也获得了不少人的支持,但其始终处于一种不温不火的状态。个人认为这在很大程度上归结于推广不给力及接口文档不够完善。MXNet长期处于快速迭代的过程,其文档却长时间未更新,导致新手用户难以掌握MXNet,老用户常常需要查阅源码才能真正理解MXNet接口的用法。

为了完善MXNet的生态圈,推广MXNet,MXNet先后推出了包括MinPy、Keras和Gluon等诸多接口,但前两个接口目前基本停止了开发,Gluon模仿PyTorch的接口设计,MXNet的作者李沐更是亲自上阵,在线讲授如何从零开始利用Gluon学习深度学习,诚意满满,吸引了许多新用户。

点评:文档略混乱,但分布式性能强大,语言支持最多,适合AWS云平台使用。

CNTK

2015年8月,微软公司在CodePlex上宣布由微软研究院开发的计算网络工具集CNTK将开源。5个月后,2016年1月25日,微软公司在他们的GitHub仓库上正式开源了CNTK。早在2014年,在微软公司内部,黄学东博士和他的团队正在对计算机能够理解语音的能力进行改进,但当时使用的工具显然拖慢了他们的进度。于是,一组由志愿者组成的开发团队构想设计了他们自己的解决方案,最终诞生了CNTK。

根据微软开发者的描述,CNTK的性能比Caffe、Theano、TensoFlow等主流工具都要强。CNTK支持CPU和GPU模式,和TensorFlow/Theano一样,它把神经网络描述成一个计算图的结构,叶子节点代表输入或者网络参数,其他节点代表计算步骤。CNTK是一个非常强大的命令行系统,可以创建神经网络预测系统。CNTK最初是出于在Microsoft内部使用的目的而开发的,一开始甚至没有Python接口,而是使用了一种几乎没什么人用的语言开发的,而且文档有些晦涩难懂,推广不是很给力,导致现在用户比较少。但就框架本身的质量而言,CNTK表现得比较均衡,没有明显的短板,并且在语音领域效果比较突出。

点评:社区不够活跃,但是性能突出,擅长语音方面的相关研究。

PyTorch

2017年1月,Facebook人工智能研究院(FAIR)团队在GitHub上开源了PyTorch,并迅速占领GitHub热度榜榜首。

PyTorch的历史可追溯到2002年就诞生于纽约大学的Torch。Torch使用了一种不是很大众的语言Lua作为接口。Lua简洁高效,但由于其过于小众,用的人不是很多。在2017年,Torch的幕后团队推出了PyTorch。PyTorch不是简单地封装LuaTorch提供Python接口,而是对Tensor之上的所有模块进行了重构,并新增了最先进的自动求导系统,成为当下最流行的动态图框架。

•简洁:PyTorch的设计追求最少的封装,尽量避免重复造轮子。不像TensorFlow中充斥着session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch的设计遵循tensor→variable(autograd)→nn.Module三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块),而且这三个抽象之间联系紧密,可以同时进行修改和操作。简洁的设计带来的另外一个好处就是代码易于理解。PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。在笔者眼里,PyTorch的源码甚至比许多框架的文档更容易理解。

•速度:PyTorch的灵活性不以速度为代价,在许多评测中,PyTorch的速度表现胜过TensorFlow和Keras等框架。框架的运行速度和程序员的编码水平有极大关系,但同样的算法,使用PyTorch实现的那个更有可能快过用其他框架实现的。

•易用:PyTorch是所有的框架中面向对象设计的最优雅的一个。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称,Keras作者最初就是受Torch的启发才开发了Keras。PyTorch继承了Torch的衣钵,尤其是API的设计和模块的接口都与Torch高度一致。PyTorch的设计最符合人们的思维,它让用户尽可能地专注于实现自己的想法,即所思即所得,不需要考虑太多关于框架本身的束缚。

•活跃的社区:PyTorch提供了完整的文档,循序渐进的指南,作者亲自维护的论坛供用户交流和求教问题。Facebook人工智能研究院对PyTorch提供了强力支持,作为当今排名前三的深度学习研究机构,FAIR的支持足以确保PyTorch获得持续的开发更新,不至于像许多由个人开发的框架那样昙花一现。

其他框架

除了上述的几个框架,还有不少的框架,都有一定的影响力和用户。比如百度开源的PaddlePaddle,CMU开发的DyNet,简洁无依赖符合C++11标准的tiny-dnn,使用Java开发并且文档极其优秀的Deeplearning4J,还有英特尔开源的Nervana,Amazon开源的DSSTNE。这些框架各有优缺点,但是大多流行度和关注度不够,或者局限于一定的领域。此外,还有许多专门针对移动设备开发的框架,如CoreML、MDL,这些框架纯粹为部署而诞生,不具有通用性,也不适合作为研究工具。


相关问题推荐

  • 回答 20

    选对培训机构比较重要,还有就是选择的时候看一下自己适合哪种风格的讲课方式,这个也很重要。因为现在5G时代来临,人工智能绝对是一个发展的大趋势,如果你自己空余时间又比较多的话,其实可以报一个辅导班,学习学习一些基本的东西,毕竟多学点总是没有坏处...

  • 回答 3

    深度学习是近几年人工智能领域的主要研究方向。深度学习的主要任务是通过构建深度卷积神经网络(Deep Neural Network,DNN)和采用大量样本数据作为输入,人们最终会得到一个具有强大分析能力和识别能力的模型,该模型包含了DNN的构成参数以应用于实际工作。...

  • 回答 3

    AI深度学习课程是用于建立、模拟人脑进行分析学习的神经网络,并模仿人脑的机制来解释数据的一种机器学习技术,主要应用于图像识别、语音识别、自然语言处理等领域。学完可以从事深度学习工程师、机器学习工程师、人工智能工程师、高级算法工程师、高级算法工...

  • 回答 16

    算法,数据相关的适合做人工智能

  • 回答 28

    人工智能取代的行业,一定有如下几个特征:1、大量重复型。2、逻辑性比较强。3、数据库依赖型。像司机,咨询,教育,医生,会计,律师助理,工程师,码农等,都是容易被取代的行业。当然,这都是强人工智能以后会发生的事,现在还是弱人工智能的时代,想进入...

  • 回答 9

    如果你是自己学着玩,提升自己的话,高中毕业都可以。如果是冲着AI算法岗或者科研一席之地,至少211硕士。具体可以亲身体验一下今年算法岗秋招。

  • 回答 9

    可以,未来的人工智能发展深度学习必然是现在大型机器生产科研必备的,证书的话某个培训好像有这个中科院的证书,具体你去百度吧

  • 回答 8

    我觉得就是人工智能的课程,现在家具都是智能家居了。这一块发展一定很好

  • 回答 3

    对于sgd算法而言,batch size太大太小都不好,太小的话训练不稳定,计算效率低;太大的话收敛速度慢,需要仔细调节一下。以2的倍数调节,例如32,64,128等

  • 回答 1

    在terminal中输入$wolf@wolf:~/Downloads/gitclonehttps://github.com/Tencent/ncnn cd切换到NCNN目录***这步很重要,这时候需要修改ncnn的root目录下的CMakeLists.txt文件,需要将倒数几行的add_subdirectory(examples),取消注释,这样就是默认编译example...

  • 回答 5

    人工智能的话其实到现在来说已经慢慢趋于成熟,学的话首先是一线城市,学出来好就业,还有就是薪资也高

  • 回答 3

    画个train and test error VS 训练数据量(training set size) 的learningcurve应该会更加直观了。可以找个简单的数据集,比如说handwritten digits或者什么的,分别用神经网络和决策树或者knn做出这个learningcurve。你会看到如果用一个决策树去解决这个问题...

  • 回答 2

    共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征。它是定义一组纹理特征的基础。     一幅图象的灰度共生矩阵能反映出图象灰度关于...

没有解决我的问题,去提问