主流深度学习框架

主流深度学习框架

深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon,等等

各个开源框架在GitHub上的数据统计

主流深度学习框架在各个维度的评分

TensorFlow比如设计神经网络结构的代码的简洁度,分布式深度学习算法的执行效率,还有部署的便利性。

TensorFlow

TensorFlow是相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写C++或CUDA代码。

核心代码和Caffe一样是用C++编写的,使用C++简化了线上部署的复杂度,并让手机这种内存和CPU资源都紧张的设备可以运行复杂模型(Python则会比较消耗资源,并且执行效率不高)。除了核心代码的C++接口,TensorFlow还有官方的Python、Go和Java接口,是通过SWIG(Simplified Wrapper and Interface Generator)实现的,这样用户就可以在一个硬件配置较好的机器中用Python进行实验,并在资源比较紧张的嵌入式环境或需要低延迟的环境中用C++部署模型。

  • 特点

    • 支持多种机器学习算法。同时TensorFlow不只局限于神经网络,其数据流式图支持非常自由的算法表达,当然也可以轻松实现深度学习以外的机器学习算法。

    • 支持数据并行模式

    • 灵活的移植性,部署便利性 。可以将同一份代码几乎不经过修改就轻松地部署到有任意数量CPU或GPU的PC、服务器或者移动设备上。相比于Theano,TensorFlow还有一个优势就是它极快的编译速度,在定义新网络结构时,Theano通常需要长时间的编译,因此尝试新模型需要比较大的代价,而TensorFlow完全没有这个问题。

    • 可视化组件。TensorFlow还有功能强大的可视化组件TensorBoard,能可视化网络结构和训练过程,对于观察复杂的网络结构和监控长时间、大规模的训练很有帮助。TensorFlow针对生产环境高度优化,它产品级的高质量代码和设计都可以保证在生产环境中稳定运行,同时一旦TensorFlow广泛地被工业界使用,将产生良性循环,成为深度学习领域的事实标准。

Caffe

Caffe全称为Convolutional Architecture for Fast Feature Embedding,是一个被广泛使用的开源深度学习框架(在TensorFlow出现之前一直是深度学习领域GitHub star最多的项目),目前由伯克利视觉学中心(Berkeley Vision and Learning Center,BVLC)进行维护。Caffe的创始人是加州大学伯克利的Ph.D.贾扬清,他同时也是TensorFlow的作者之一,曾工作于MSRA、NEC和Google Brain,目前就职于Facebook FAIR实验室。框架源码:caffe_GitHub

  • Caffe的主要优势包括如下几点:
    • 容易上手,网络结构都是以配置文件形式定义,不需要用代码设计网络。
    • 训练速度快,能够训练state-of-the-art的模型与大规模的数据。
    • 组件模块化,可以方便地拓展到新的模型和学习任务上。

Theano

Theano诞生于2008年,由蒙特利尔大学Lisa Lab团队开发并维护,是一个高性能的符号计算及深度学习库。因其出现时间早,可以算是这类库的始祖之一,也一度被认为是深度学习研究和应用的重要标准之一。Theano的核心是一个数学表达式的编译器,专门为处理大规模神经网络训练的计算而设计。它可以将用户定义的各种计算编译为高效的底层代码,并链接各种可以加速的库,比如BLAS、CUDA等。Theano允许用户定义、优化和评估包含多维数组的数学表达式,它支持将计算装载到GPU(Theano在GPU上性能不错,但是CPU上较差)。与Scikit-learn一样,Theano也很好地整合了NumPy,对GPU的透明让Theano可以较为方便地进行神经网络设计,而不必直接写CUDA代码。框架源码:theano_github

  • Theano的主要优势如下:

  • 集成NumPy,可以直接使用NumPy的ndarray,API接口学习成本低。

  • 计算稳定性好,比如可以精准地计算输出值很小的函数(像log(1+x))。
  • 动态地生成C或者CUDA代码,用以编译成高效的机器代码。

Theano是一个完全基于Python(C++/CUDA代码也是打包为Python字符串)的符号计算库

Keras

Keras是一个崇尚极简、高度模块化的神经网络库,使用Python实现,并可以同时运行在TensorFlow和Theano上。它旨在让用户进行最快速的原型实验,让想法变为结果的这个过程最短。Theano和TensorFlow的计算图支持更通用的计算,而Keras则专精于深度学习。Theano和TensorFlow更像是深度学习领域的NumPy,而Keras则是这个领域的Scikit-learn。它提供了目前为止最方便的API,用户只需要将高级的模块拼在一起,就可以设计神经网络,它大大降低了编程开销(code overhead)和阅读别人代码时的理解开销(cognitive overhead)。它同时支持卷积网络和循环网络,支持级联的模型或任意的图结构的模型(可以让某些数据跳过某些Layer和后面的Layer对接,使得创建Inception等复杂网络变得容易),从CPU上计算切换到GPU加速无须任何代码的改动。因为底层使用Theano或TensorFlow,用Keras训练模型相比于前两者基本没有什么性能损耗(还可以享受前两者持续开发带来的性能提升),只是简化了编程的复杂度,节约了尝试新网络结构的时间。可以说模型越复杂,使用Keras的收益就越大,尤其是在高度依赖权值共享、多模型组合、多任务学习等模型上,Keras表现得非常突出。Keras所有的模块都是简洁、易懂、完全可配置、可随意插拔的,并且基本上没有任何使用限制,神经网络、损失函数、优化器、初始化方法、激活函数和正则化等模块都是可以自由组合的。Keras也包括绝大部分state-of-the-art的Trick,包括Adam、RMSProp、Batch Normalization、PReLU、ELU、LeakyReLU等。同时,新的模块也很容易添加,这让Keras非常适合最前沿的研究。Keras中的模型也都是在Python中定义的,不像Caffe、CNTK等需要额外的文件来定义模型,这样就可以通过编程的方式调试模型结构和各种超参数。在Keras中,只需要几行代码就能实现一个MLP,或者十几行代码实现一个AlexNet,这在其他深度学习框架中基本是不可能完成的任务。Keras最大的问题可能是目前无法直接使用多GPU,所以对大规模的数据处理速度没有其他支持多GPU和分布式的框架快。Keras的编程模型设计和Torch很像,但是相比Torch,Keras构建在Python上,有一套完整的科学计算工具链,而Torch的编程语言Lua并没有这样一条科学计算工具链。无论从社区人数,还是活跃度来看,Keras目前的增长速度都已经远远超过了Torch。框架源码:keras_github

Torch

Torch给自己的定位是LuaJIT上的一个高效的科学计算库,支持大量的机器学习算法,同时以GPU上的计算优先。Torch的历史非常悠久,但真正得到发扬光大是在Facebook开源了其深度学习的组件之后,此后包括Google、Twitter、NYU、IDIAP、Purdue等组织都大量使用Torch。Torch的目标是让设计科学计算算法变得便捷,它包含了大量的机器学习、计算机视觉、信号处理、并行运算、图像、视频、音频、网络处理的库,同时和Caffe类似,Torch拥有大量的训练好的深度学习模型。它可以支持设计非常复杂的神经网络的拓扑图结构,再并行化到CPU和GPU上,在Torch上设计新的Layer是相对简单的。它和TensorFlow一样使用了底层C++加上层脚本语言调用的方式,只不过Torch使用的是Lua。Lua的性能是非常优秀的(该语言经常被用来开发游戏),常见的代码可以通过透明的JIT优化达到C的性能的80%;在便利性上,Lua的语法也非常简单易读,拥有漂亮和统一的结构,易于掌握,比写C/C++简洁很多;同时,Lua拥有一个非常直接的调用C程序的接口,可以简便地使用大量基于C的库,因为底层核心是C写的,因此也可以方便地移植到各种环境。Lua支持Linux、Mac,还支持各种嵌入式系统(iOS、Android、FPGA等),只不过运行时还是必须有LuaJIT的环境,所以工业生产环境的使用相对较少,没有Caffe和TensorFlow那么多。
框架源码:torch_github

参考资料:

  1. 主流深度学习框架对比
  2. 现在最火的深度学习框架是什么?_2017

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4月1日起支付宝、微信扫码支付单日限额500元,够用吗?

500块钱对于绝大部人来说肯定够用了。央行政策12月27日,央行印发《条码支付业务规范(试行)》,该政策将于2018年4月1日起实施,该规范采用了分级管理,不同的风险等级支付的限额不一样。(一&#x…

为什么越来越多的人都拒绝办信用卡?

近段有个网友在论坛发帖说现在有越来越多的人拒绝申请信用卡,但事实果真如此吗?我们先来看一下2017年信用卡发行量2016年,整个一年信用卡发行量是4.7亿张,但是进入2017年之后,信用卡发行量出现了猛涨,截至2…

控制理论之数学基础

控制理论之数学基础 特征值与特征向量 线性化 线性化是在某一点的线性化。 线性时不变系统的冲激响应与卷积 卷积的拉普拉斯变换 欧拉公式证明 例子 复数 传递函数 寻找阈值

买房时,公积金账户里的钱可以作为首付款吗?

公积金账户里面的钱能不能提取出来做首付款要看具体情况。1、公积金余额比较多,超过了公积金贷款比例上限可以提取出来。你去办理公积金贷款的时候,公积金管理中心是需要你提供首付凭证的,然后根据你的公积金余额来核实,你最高能贷…

人工智能、机器学习、深度学习和神经网络的区别

人工智能背景:人工智能最初可以追溯至1956年,当时多名计算机科学家在达特茅斯会议上共同提出了人工智能的概念。在随后几十年中,人工智能一方面被认为是人类文明未来的发展方向,另一方面也被认为是难以企及的梦想。实际上&#xf…

神经网络知识整理

简介人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。ANN是由大量的简单处理单元经广泛并行互连形成的一种网络系统。它是对人脑系统的简化、抽象和模拟,具有大脑功能…

非线性控制理论

非线性控制理论 随着科学技术的发展,人们对实际生产过程的分析要求日益精密,各种较为精确的分析和科学实验的结果表明,任何一个实际的物理系统都是非线性的。所谓线性只是对非线性的一种简化或近似,或者说是非线性的一种特例。 …

回滚 - 每天5分钟玩转 Docker 容器技术(141)

kubectl apply 每次更新应用时 Kubernetes 都会记录下当前的配置,保存为一个 revision(版次),这样就可以回滚到某个特定 revision。 默认配置下,Kubernetes 只会保留最近的几个 revision,可以在 Deployment…

霍金一生重要时刻照片合集,3次来中国,年轻时也是帅哥一枚

霍金童年时期霍金和他妹妹12岁的时候霍金在之家花园霍金在骑自行车中青年时期霍金在划船霍金和同学们在一起霍金21岁时患上肌肉萎缩性侧索硬化症23岁时霍金取得了牛津大学博士学位1965年,霍金与简恩结为夫妻霍金与孩子们霍金和妻儿在牛津大学1973年,他考察黑洞附近的…

论文写作技巧

论文写作技巧 引言 回答二个问题,研究主题是啥?动机是啥?

没有还款日期的借条会永久有效吗?

从债务关系上看,借条的有效期是永久的,不管过来多长时间,哪怕是100年,只要钱没有还清,那债务关系就会一直存在,只要借款人愿意还钱都有效。但是这种债务关系是否受到法律的保护是有时间限制的,就…

为什么大多数穷人都不敢创业,穷人最缺的是什么?

提到这个问题,估计很多人会首先想到的是思维上的差异,我们网上看到最多的分析为什么穷人不敢创业而富人敢,很多人提到的就是思维上的差异。富人之所以富,因为他们有富的思维,而穷人之所以穷,是因为他们是穷…

原来信用卡肉这么肥,怪不得银行天天给你发短信叫你办理

大家是不是经常收到银行信用卡推销短信或电话?为什么银行这么积极推销信用卡呢?大家不要以为银行是慈善家,有着普渡天下的菩萨心肠,白白给你最多50多天的免息期。实际上信用卡是一块大肥肉,比贷款来钱更轻松&#xff0…

动态系统建模-状态空间方程

动态系统建模-状态空间方程 状态空间方程是现代控制理论的基础, 它以矩阵的形式表达系统状态变量、 输入及输出之间的关系。 它可以描述和处理多输入多输出(MultipleInput Multiple Output, MIMO) 的系统。 状态空间方程 单输入单输出(SingleInput Single Output,SISO) 系统…

社保卡绑定支付宝,直接在支付宝上报销!

很多朋友可能有这样的疑问,社保卡能绑定支付宝吗?如果你的社保卡是金融社保卡,那当然可以绑定支付宝和微信。但是如果你的社保卡是以前那种老社保卡,那是没法绑定的。一、金融社保卡可以正常绑定支付宝、微信。金融社保卡本身也是…

Health Check - 每天5分钟玩转 Docker 容器技术(142)

强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性。自愈的默认实现方式是自动重启发生故障的容器。除此之外,用户还可以利用 Liveness 和 Readiness 探测机制设置更精细的健康检查,进而实现如下需求: 零停机部署。 避免部署无效…

动态系统的建模与分析

动态系统的建模与分析 分析被控对象的物理特性及动态表现,在这个基础上建立数学模型,数学模型可以是动力学模型、热力学模型、流体力学模型和经济学模型等,然后在数学模型的基础上进行控制器的设计,为满足不同的要求就要应用不同…

应用监督式学习

监督学习定义:监督式学习算法接受已知的输入数据集合(训练集)和已知的对数据的响应(输出),然后训练一个模型,为新输入数据的响应生成合理的预测。监督学习技术可分成分类或者回归的形式。 分类&…

信用卡逾期成黑户,不良记录会背一辈子吗?

黑户不良记录是否会倍一辈子,关键在于你怎么选择。你可以选择背5年,也可以选择背一辈子!首先给大家一个安慰,信用卡逾期不等于黑名单,所谓黑名单只是银行的一种说法,一般连续逾期3个月以上才会被银行关进小…

傅里叶级数和傅里叶变换

傅里叶级数和傅里叶变换 傅里叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。