深度学习框架(转自知乎)

作者:ZOMI

链接:https://www.zhihu.com/question/53465308/answer/289859169
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

吃货的我来举个栗子。深度学习就像菜谱,数据就是肉和青菜,深度学习框架就是炒菜的锅和铲。谁说炒一碟红烧土豆一定要用caffe出品的锅,谁说炒一碟香煎莲藕一定要用google出品的铲?我们只要学会菜谱,研究一下锅和铲的属性并多加实践练习,就可以炒出一碟香喷喷的菜。


既然提到深度学习的框架,那么我们现在可以来分析一下深度学习的框架:


在深度学习领域的五大巨头里,它们都各自力挺一种深度学习框架:像谷歌有自家的TensorFlow、Facebook有Torch、百度有Paddle Paddle、微软有CNTK、而亚马逊的AWS则有MXNet,现在还有支持HADOOP的NL4J深度学习框架。

<img src="https://pic1.zhimg.com/50/v2-4ec760be04f2ac6aace2c739d1c11aa6_hd.jpg" data-caption="" data-size="normal" data-rawwidth="890" data-rawheight="283" class="origin_image zh-lightbox-thumb" width="890" data-original="https://pic1.zhimg.com/v2-4ec760be04f2ac6aace2c739d1c11aa6_r.jpg">

表1.1 是五大主流深度学习框架概要对比表。每种框架都有其优缺点,选择的时候更加需要根据自身业务的实际需求。例如需要用到对时间序列分析的,那么就会使用循环神经网络RNN,而Caffe、MXNet就是对图像卷积处理非常友善而缺乏循环神经网络,Google的TensorFlow则是支持其他机器学习算法,还支持增强学习Reinforcement learning算法。常言道,欲先攻必先利器,在正式进入深度学习之前,让我们一起来了解一下各大主流深度学习框架之间的关系与其优缺点。

<img src="https://pic1.zhimg.com/50/v2-44ef48565954ca16171fa8756b31739e_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1380" data-rawheight="438" class="origin_image zh-lightbox-thumb" width="1380" data-original="https://pic1.zhimg.com/v2-44ef48565954ca16171fa8756b31739e_r.jpg">

1. Caffe 1.0

Caffe1.0 是第一个主流的工业级深度学习工具。在2013年底由UC Berkely的贾扬清基于C和C++开发的深度学习框架,其特点是具有非常出色的卷积神经网络实现,尤其在13年至16年期间大部分与视觉有关的深度学习论文都采用了caffe框架。而到至今为止Caffe在计算机视觉领域依然是最流行的工具包。可是因为开发早和历史遗留问题,其架构的缺点是不够灵活、缺乏对递归网络RNN和语言建模的支持,因此Caffe不适用于文本、声音或时间序列数据等其他类型的深度学习应用。

2. TensorFlow 0.88

TensorFlow基于python编写,通过C/C++引擎加速,是Google开源的第二代深度学习框架。TensorFlow处理递归神经网RNN非常友好,并且内部实现使用了向量运算的符号图方法,使用图graph来表示计算任务,这样使得新网络的指定变得相当容易,支持快速开发。TensorFlow其用途不止于深度学习,还可以支持增强学习和其他算法,因此扩展性很好。缺点是目前TensorFlow还不支持“内联(inline)”矩阵运算,必须要复制矩阵才能对其进行运算,复制庞大的矩阵会导致系统运行效率降低,并占用部分内存。另外TensorFlow不提供商业支持,仅为研究者提供的一种新工具,因此公司如果要商业化需要考虑开源协议问题。

3. Torch

Torch由Facebook用Lua编写的开源计算框架,支持机器学习算法。其具有有较好的灵活性和速度。实现并且优化了基本的计算单元,可以很简单地在此基础上实现自己的算法,不用浪费精力在计算优化上面。Facebook于2017年1月开放了Torch的Python API ― PyTorch源代码,其支持动态计算图,能处理长度可变的输入和输出,这尤其适用于循环神经网络RNN的应用。缺点是接口为lua语言,需要时间去学习新的编程语言。

4. Theano

Theano是深度学习框架中的元老,使用Python编写。Theano派生出了大量Python深度学习库,最著名的包括Blocks和Keras。其最大特点是非常的灵活,适合做学术研究的实验,且对递归网络和语言建模有较好的支持,缺点是速度较慢。

5. MXNet

MXNet主要由C/C++编写,提供多种API的机器学习框架,面向R、Python和Julia等语言,目前已被亚马逊云服务作为其深度学习的底层框架。由于MXNet是16年新兴的深度学习框架,因此大量借鉴了Caffe的优缺点。其最主要的特定是是分布式机器学习通用工具包DMLC 的重要组成部分,因此其分布式能力较强。MXNet还注重灵活性和效率,文档也非常的详细,同时强调提高内存使用的效率,甚至能在智能手机上运行诸如图像识别等任务。但是其与Caffe一样缺乏对循环神经网络RNN的支持,相对比使用JAVA实现的NL4J在分布式方面没有JAVA方便。

href="">6. Keras

Keras 是一个基于Theano和TensorFlow的深度学习库,由于受到深度学习元老框架Torch的启发,拥有较为直观的API,有望成为未来开发神经网络的标准Python API。而本书主要采用Keras作为主要代码API,因为其具有简洁的API接口,方便理解深度学习的原理与插入代码片段。

<img src="https://pic1.zhimg.com/50/v2-d5e3d2f9ffd1d39a482b466ecd517778_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1356" data-rawheight="1080" class="origin_image zh-lightbox-thumb" width="1356" data-original="https://pic1.zhimg.com/v2-d5e3d2f9ffd1d39a482b466ecd517778_r.jpg"> <img src="https://pic4.zhimg.com/50/v2-82db7e75420366f13b8ea034620cfec4_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1372" data-rawheight="262" class="origin_image zh-lightbox-thumb" width="1372" data-original="https://pic4.zhimg.com/v2-82db7e75420366f13b8ea034620cfec4_r.jpg">

根据笔者的实际开发经验,希望未来的深度学习模型可以应用于大型的服务器和分布式集群里面,建议采用MXNet或者DL4J,如果需要与Hadoop的业务相结合,DL4J或许是最好的选择。如果只懂C或者C++,不懂python,Caffe或许是你最好的选择。如果是非商业开发,可以选择Google的TensorFlow或者是Facebook的Torch,具体需要根据不同的语言进行选择。对于简单的教学和demo实验,我们可以使用Keras去实现简单的深度学习模型。最后可惜的是在2017年下半年,Yoshua Bengio 宣布 Theano 停止更新维护。


深度学习的框架日新月异,可能上面的总结会有点过时,但是百变不离其中。好好学习一下菜谱,炒个香喷喷,热辣辣的菜出来震惊一下食神的舞台。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值