您好,欢迎访问三七文档
对比与选择目录深度学习概念深度学习各种框架如何选择深度学习框架深度学习框架概念让我们用一个例子来理解这个概念。考虑左面的图像集合。此图像中有各种类别,猫、骆驼、鹿、大象等。我们的任务是将这些图像分类到相应的类(或类别)中。卷积神经网络(CNN)对于此类图像分类任务非常有效。所以我们需要去实现这个模型,但是如果你开始从头开始编写CNN,那么获得工作模型将是几天后(甚至是几周),而这就是深度学习框架真正改变了这尴尬的局面。深度学习框架是一种界面、库或工具,它使我们在无需深入了解底层算法的细节的情况下,能够更容易、更快速地构建深度学习模型。深度学习框架利用预先构建和优化好的组件集合定义模型,为模型的实现提供了一种清晰而简洁的方法。利用恰当的框架来快速构建模型,而无需编写数百行代码,一个良好的深度学习框架具备以下关键特征:1.针对性能进行了优化2.易于理解和编码3.良好的社区支持4.并行化进程以减少计算5.自动计算渐变深度学习各种框架Caffe官网:Github:Caffe由加州大学伯克利的PHD贾扬清开发,全称ConvolutionalArchitectureforFastFeatureEmbedding。Caffe是一个清晰而高效的深度学习框架。①基于的C++/CUDA架构,支持命令行、Python和Matlab接口;②可以在CPU和GPU直接无缝切换,同时支持多GPU;;③主要用在计算机视觉领域,在该领域Caffe依然是最流行的工具包,它有很多扩展;④目前由伯克利视觉学中心(BerkeleyVisionandLearningCenter,BVLC)进行维护。CaffeCaffe的广泛性体现在,让只要会C++编程的人员就可以编写深度学习代码,降低了深度学习的门槛。随着Caffe框架的迅速流行,它逐步形成了自己强大的用户社区。在学术界,目前每天都有以Caffe框架作为底层实现的研究成果发布,而在工业界,已经有许多产品使用Caffe作为其深度学习算法实现的内核。从学术界到工业界,大家可以共享同一套底层代码,基于同一套平台进行研究、交流和生产。Caffe作为快速开发和工程应用是非常适合的。Caffe官方提供了大量examples,照着examples写,cafffe只要求会写prototxt就行,它的训练过程、梯度下降算法等等都实现封装好了,懂了prototxt的语法了,基本就能自己构造神经网络了。Caffe缺点:由于一些遗留的架构问题,对RNN模型支持的不够完善。CaffeCaffe因为知名度较高,被广泛地应用于前沿的工业界和学术界,许多提供源码的深度学习的论文都是使用Caffe来实现其模型的。在计算机视觉领域Caffe应用尤其多,可以用来做人脸识别、图片分类、位置检测、目标追踪等。虽然Caffe主要是面对学术圈和研究者的,但它的程序运行非常稳定,代码质量比较高,所以也很适合对稳定性要去严格的生产环境,可以算是第一个主流的工业级深度学习框架。因为Caffe的底层是基于C++的,因此可以在各种硬件环境编译并具有良好的移植性,支持Linux、Max和Windows系统,也可以编译部署到移动设备系统如Android和IOS上。Caffe也提供了Python语言接口pycaffe;Caffe的配置文件使用.prototxt文件,使用许多顺序连接的Layer来描述神经网络结构。TensorFlow官网:Github:TensorFlow是谷歌发布的机器学习系统,是一个利用数据流图(DataFlowGraphs)进行数值计算的开源软件库。与2015年11月在GitHub上开源,并在2016年4月补充了分布式版本,从2017年1月的1.0版本后,API接口趋于稳定。前端支持phython、C++、Java等多种开发语言,后端使用C++、CUDA等写成。TensorFlow实现的算法可以在众多异构的系统上方便地移植,比如Android手机、iPhone、普通的CPU服务器,乃至大规模GPU集群。支持CNN、RNN和LSTM算法,这都是目前在Image,Speech和NLP最流行的深度神经网络模型。TensorFlowTensorFlowTensorFlow的特点:1.机动性:TensorFlow并不只是一个规则的neuralnetwork库,事实上如果可以将用户的计算表示成dataflowgraph形式,就可以使用TensorFlow。2.可适性强:可应用在不同设备上,cpus,gpu,移动设备,云平台等。3.多种编程语言可选:TensorFlow很容易使用,有python接口和C++接口。其他语言可以使用SWIG工具使用接口。(SWIG-SimplifiedWrapperandInterfaceGenerator,是一个非常优秀的开源工具,支持将C/C++代码与任何主流脚本语言相集成。)4.最优化表现:充分利用硬件资源,TensorFlow可以将graph的不同计算单元分配到不同设备执行。Torch官网:Github:Torch并没有跟随Python的潮流,它底层用C++语言实现,用Lua对接口进行封装,被Facebook人工智能研究实验室应用和维护。包括Google、Twitter、NYU、Purdue等组织都大量使用Torch;网上很多RNN的例子都是用torch写的,所以torch是学习RNN的一个很好的途径。Torch的目标是让设计科学计算算法变得便捷,包含了大量的机器学习、计算机视觉、信号处理、并行计算、图像、视频、音频的库,同时和Caffe类似,拥有大量的训练好的深度学习模型。Torch的nn库支持神经网络、自编码器、线性回归、卷积网络、循环神经网络等,同时支持定制的损失函数及梯度计算。Torch优点:对卷积网络的支持非常好;Torch通过很多非官方的扩展支持大量的RNN;构建模型简单;高度模块化;快速高效的GPU支持;运行在LuaJIT上,与C++、C#以及Java等工业语言相比速度较快,也不需额外编译;可嵌入到iOS、Android和FPGA后端的接口。缺点:对初学者缺乏规范的例子。需要先迈过Lua这个门槛,不过对于如果熟悉Python,lua也能很快上手。需要luaJIT(采用C语言写的Lua代码的解释器)的支持,虽然性能不错,但是集成却存在着较大的障碍。Theano官网:Github:Theano于2008年发布,是由LISA集团(现MILA)在加拿大魁北克的蒙特利尔大学(YoshuaBengio主导)开发。Theano是一个完全基于Python的符号计算库。用起来简单方便,可以作为入门选择之一。用它可以很方便的将数学表达式通过theano表达出来。后续几乎所有深度学习框架都借鉴了Theano的符号计算思想。支持Linux、Mac和Windows。对CNN支持很好,同时它的符号运算API支持循环控制,让RNN的实现非常简单并且高性能。Theano优点:灵活性好,能很快的验证新的想法基于Python封装能让使用者快速上手。缺点:模型较大时编译时间较长:运算时需要将用户的Python代码转换成CUDA代码,再编译为二进制可执行文件,编译复杂模型的时间非常久。Theano在导入时也比较慢,而且一旦设定了选择某块GPU,就无法切换到其他设备。目前,Theano在CUDA和cuDNN上不支持多GPU,只在自己的gpuarray库上支持GPU训练,速度暂时比不上CUDA版本。输出的错误信息不够友好,对初学者有一定难度。Keras官网:keras.ioGithub:Keras是一个简约、高度模块化的神经网络库,通过Python封装了神经网络各类常见模块,包括CNN、RNN等,底层支持基于Theano和Tensorflow运行。利用Keras能快速地搭建模型,对初学者是个不错的选择。同时支持CNN和RNN,支持级联的模型或任意的图结构模型(可以让某些数据跳过某些Layer和后面的Layer对接,使得创建Inception等复杂网络变得容易);底层使用Theano或Tensorflow,用Keras训练模型相比于前两者基本没有什么性能损耗(还可以享受前两者持续开发带来的性能提升),只是简化了编程的复杂度,节约了尝试新网络结构的时间。Keras模型越复杂,Keras优势表现越显著。尤其是在高度依赖权值共享、多模型组合、多任务学习等模型上,Keras表现非常突出。Keras所有的模块都是简洁、易懂、完全可配置,并且基本上没有任何使用限制,神经网络、损失函数、优化器、初始化、激活函数和正则化等模块都是可以自由组合的。Keras包括绝大部分state-of-art的Trick,包括Adam、RMSProp、BatchNormalization、PReLU、ELU、LeakyReLu等。同时,新的模块也很容易添加,这让Keras非常适合最前沿的研究。缺点:目前只支持单卡运算,对于大规模模型不适合;文档有些部分对初学者门槛较高,可能需要深入源码。MXNet官网:mxnet.ioGithub:MXNet核心库使用C++源文件,Android、ios都可以编译。开发人员还可以使用多种语言:Python,C++,R,Scala,Julia,Matlab和Java。MXNet强调提高内存使用的效率,甚至能在智能手机上运行诸如图像识别等任务。MXNet是开源深度学习计算平台,它是DMLC分布式机器学习通用工具包的重要部分。它支持Linux,windows和Mac平台,支持很多种语言,很容易上手学习,运用起来也很灵活。作为2016年的开源新秀之一,MANet值得注意的特征是其紧凑的大小和跨平台的可移植性。MXNet优点:可移植性高。支持分布式并行计算,是各个框架中率先支持多个CPU或GPU上训练模型以提高速度。在多个GPU上运行它可获得的加速是是呈高度线性的——在128个GPU上,MXNet的运行速度比在单个GPU上快109倍。显存利用高效,并且可以灵活的运行在移动设备上。同时支持声明式和命令式编程。缺点:教程少,学习难度更大稍微杂乱,低级Tensor操作符很少,灵活性一般。CNTK官网:cntk.ioGithub:CNTK(ComputationalNetworkToolkit)是微软研究院开源的深度学习框架。目前已经发展成为一个通用的跨平台的深度学习系统,在语音识别领域的使用尤其广泛。CNTK支持各种前馈网络,包括MLP、CNN、RNN、LSTM、Sequence-to-Sequence等模型。CNTK拥有产品级的代码质量,支持多GPU的分布式训练。CNTK拥有很高的灵活度,和Caffe一样通过配置文件定义网络结构,再通过命令行程序执行训练,支持AdaGrad、RmsProp等优化方法。扩展性好,除了内置的大量运算核,还允许用户定义自己的计算节点,支持高度的定制化。CNTKCNTK在2016年9月发布了对强化学习
本文标题:深度学习框架
链接地址:https://www.777doc.com/doc-1827893 .html