基本概念:DL4J,Torch,Theano,TensorFlow,Caffe,Paddle,MxNet,Keras和CNTK的比较

这里抛出来的一大堆的深度学习框架,其实除开这些框架还有一些其他的深度学习框架.这里就不全部列举了.

关于这些框架的比较,我们主要从各自的优劣势,擅长的领域,上手的难易度等来分析,这里有一个分析的挺好的网站推荐大家直接去看一下.不过由于这个网站明显是为了推广自家的DL4J框架的,因此它的一些优缺点比对可能带有一些针对性,大家看看了解一个大概就行了.就像买家具一样,多跑几家店听听这几家店之间互相说出来的其他店的缺点,可以让你更加清楚的了解行情.

https://deeplearning4j.org/cn/compare-dl4j-torch7-pylearn

网站访问速度有些慢,我摘抄一部分重要框架的内容

DL4J

DL4J全称DeepLearning4Java,接触这个框架的原因很简单,因为我是Java开发背景转机器学习的,所以必然会关注一下这么多学习框架里面唯一一个对Java支持的很好的框架.

与其他深度学习框架相比,Deeplearning4j在API语言、宗旨和集成性方面独具特色。DL4J是基于JVM、聚焦行业应用且提供商业支持的分布式深度学习框架,能在合理的时间内解决各类涉及大量数据的问题。DL4J与Kafka、Hadoop和Spark集成,可使用任意数量的GPU或CPU运行,而且发生任何问题都可以联系服务热线。

DL4J是一种跨平台的便携式学习库,并非专门针对AWS、Azure或谷歌云等任何一种特定的云端服务而优化。论速度,DL4J用多GPU运行非平凡图像处理任务时的性能可媲美Caffe,优于TensorFlow和Torch.Deeplearning4j拥有Java、Scala和Python API(所用的Python API为Keras)。

Torch 和 Pytorch

是用Lua编写的带API的计算框架,支持机器学习算法。Facebook和Twitter等大型科技公司使用Torch的某些版本,由内部团队专门负责定制自己的深度学习平台。Lua是上世纪九十年代早期在巴西开发的多范式脚本语言.Facebook于2017年1月开放了Torch的Python API -PyTorch的源代码。PyTorch 支持动态计算图,让您能处理长度可变的输入和输出

优点:

大量模块化组件,容易组合 
很容易编写自己的层类型并在GPU上运行 
Lua - 大多数学习库的代码是Lua,比较易读 
有很多已预训练的模型

缺点:

通常需要自己编写训练代码(即插即用相对较少) 
不提供商业支持 
文档质量参差不齐

Theano

深度学习领域的许多学术研究者依赖Theano,Theano是深度学习框架中的元老,用Python 编写。Theano和NumPy一样,是处理多维数组的学习库。Theano可与其他学习库配合使用,非常适合数据探索和研究活动。

优点:

Python + NumPy 
计算图是良好的抽象化方式 
原始的Theano级别偏低 
RNN与计算图匹配良好 
高级的包装(Keras、Lasagne)减少了使用时的麻烦 

缺点:

原始的Theano级别偏低 
错误信息可能没有帮助 
大型模型的编译时间可能较长 
比Torch笨重许多 
对已预训练模型的支持不够完善 
在AWS上容易出现bug 
只支持单个GPU

TensorFlow

谷歌开发了TensorFlow来取代Theano,这两个学习库其实很相似。有一些Theano的开发者在谷歌继续参与了TensorFlow的开发,其中包括后来加入了OpenAI 的 Ian Goodfellow。

目前TensorFlow还不支持所谓的“内联(inline)”矩阵运算,必须要复制矩阵才能对其进行运算。复制非常大的矩阵会导致成本全面偏高。TF运行所需的时间是最新深度学习工具的四倍。谷歌表示正在解决这一问题。

和大多数深度学习框架一样,TensorFlow是用一个Python API编写的,通过C/C++引擎加速。虽然它对Java API有实验性支持,但目前它是是非常不稳定的,这种解决方案并不适合Java和Scala用户群。

TensorFlow运行明显比其他框架慢(例如:CNTK 和 MxNet)

TensorFlow的用途不止于深度学习。TensorFlow其实还有支持强化学习和其他算法的工具。

谷歌似乎已承认TensorFlow的目标包括招募人才,让其研究者的代码可以共享,推动软件工程师以标准化方式应用深度学习,同时为谷歌云端服务带来更多业务――TensorFlow正是为该服务而优化的。

TensorFlow不提供商业支持,而谷歌也不太可能会从事支持开源企业软件的业务。谷歌的角色是为研究者提供一种新工具。

和Theano一样,TensforFlow会生成计算图(如一系列矩阵运算,例如z = sigmoid(x),其中x和z均为矩阵),自动求导。自动求导很重要,否则每尝试一种新的神经网络设计就要手动编写新的反向传播算法,没人愿意这样做。在谷歌的生态系统中,这些计算图会被谷歌大脑用于高强度计算,但谷歌还没有开放相关工具的源代码。TensorFlow可以算是谷歌内部深度学习解决方案的一半。

从企业的角度看,许多公司需要思考的问题在于是否要依靠谷歌来提供这些工具。

注意:有部分运算在TensorFlow中的运作方式与在NumPy中不同。

优点:

Python + NumPy 
与Theano类似的计算图抽象化 
编译时间快于Theano 
用TensorBoard进行可视化 
同时支持数据并行和模型并行 

缺点:

速度比其他框架慢 
比Torch笨重许多;更难理解 
不提供商业支持 
已预训练的模型不多 
加载每个新的训练批次时都要跳至Python 
不太易于工具化 
动态类型在大型软件项目中容易出错

Caffe

它的全称是 “Convolution Architecture For Feature Extraction”,意为“用于特征提取的卷积架构”,很明白地体现了它的用途。Caffe 的创始人,是加州大学伯克利分校的中国籍博士生贾扬清。当时贾在伯克利计算机视觉与学习中心做研究。博士毕业后,他先后在谷歌和 Facebook 工作.

Caffe不适用于文本、声音或时间序列数据等其他类型的深度学习应用。与本文提到的其他一些框架相同,Caffe选择了Python作为其API

优点:

适合前馈网络和图像处理 
适合微调已有的网络 
无需编写任何代码即可训练模型 
Python接口相当有用

缺点:

需要用C++ / CUDA编写新的GPU层 
不适合循环网络 
用于大型网络(GoogLeNet、ResNet)时过于繁琐 
不可扩展,有些不够精简 
不提供商业支持 
更新缓慢,可能以后不再更新

Caffe2

令业界翘首以盼的Caffe2将接替原版Caffe。Caffe的开发人目前在Facebook就职。Caffe2是继Torch/PyTorch之后第二个得到Facebook支持的深度学习框架。从目前的宣传来看,Caffe2的主要区别似乎是更加轻便且可扩展性更强。与Caffe和PyTorch一样,Caffe2提供一个在C++引擎上运行的Python API

优点

BSD许可协议 

缺点

不提供商业支持

CNTK

CNTK是微软的开源深度学习框架。CNTK的全称是“计算网络工具包。”此学习库包括前馈DNN、卷积网络和循环网络。CNTK提供基于C++代码的Python API。虽然CNTK遵循一个比较宽松的许可协议,却并未采用ASF 2.0、BSD或MIT等一些较为传统的许可协议。这一许可协议不适用于CNTK旨在简化分布式训练的1-Bit随机梯度下降(SGD)方法,该组件不得用作商业用途。

Keras

Keras是一个基于Theano和TensorFlow的深度学习库,具有一个受Torch启发、较为直观的API。这可能是目前最好的Python API

优点:

受Torch启发的直观API 
可使用Theano、TensorFlow和Deeplearning4j后端(即将推出CNTK后端) 
该框架正快速成长 
有可能成为用于开发神经网络的标准Python API 

MxNet

MxNet是一个提供多种API的机器学习框架,主要面向R、Python和Julia等语言,目前已被亚马逊云服务采用。据传Apple在2016收购Graphlab/Dato/Turi后,有些部门也开始使用MxNet。MxNet是一个快速灵活的学习库,由华盛顿大学的Pedro Domingos及其研究团队运作

Paddle

是由百度开发支持的深度学习框架,全名为PArallel Distributed Deep LEarning,即 “并行分布式深度学习”。Paddle是最新发布的大型深度学习框架;与多数框架一样,它提供一个Python API。

关于各个框架的许可协议:

上述开源项目的另一区别在于其许可协议:Theano、Torch和Caffe采用BSD许可协议,未能解决专利和专利争端问题。Deeplearning4j和ND4J采用Apache 2.0许可协议发布。该协议包含专利授权和防止报复性诉讼的条款,也就是说,任何人都可以自由使用遵循Apache 2.0协议的代码创作衍生作品并为其申请专利,但如果对他人提起针对原始代码(此处即DL4J)的专利权诉讼,就会立即丧失对代码的一切专利权。(换言之,这帮助你在诉讼中进行自我防卫,同时阻止你攻击他人。)BSD一般不能解决这个问题。


以上的内容均是摘自与DL4J的官网,有部分的信息有补充,大多数都是官网原版的内容.建议大家直接访问以下官网来看.

下面说一下这些框架里面两个特殊的--TensorFlow和Keras,为啥说这两个特殊呢?因为我看的关于机器学习的第一本实体书就是TensorFlow+Keras框架学习,具体的书里面的内容可以参看我写的关于这本书的读书笔记系列哈.

这边就当是为这个系列写引言了.

先给个截止发文时的机器学习框架Git热度排行榜的结论.排第一的当然是TensorFlow啦,排第二的就是这个Keras框架.

啥情况下你需要使用Keras啥时候使用TensorFlow呢?

用Java程序员可以理解的比较是TensorFlow就像是数据库层,而Keras是持久化层,为你封装了大量的底层操作.Keras不仅支持TensorFlow,也支持Theano框架(实际上Keras早期是为Theano框架准备的,一开始并不支持TensorFlow).在实际使用了TensorFlow和Keras框架以后,你会发现Keras框架的编码要简单许多,它隐蔽了许多底层操作细节.例如张量运算等.这里要讨论一下搞机器学习的两类人了,一类是将已有的机器学习模型想办法运用到实际场景中去,他们并不会过多地修改模型.一类是需要对底层的模型做大量的修改甚至做出一些奇葩的神经网络来应对各种场景.Keras虽然也可以做一些模型层的扩展.但是如果你是后者,还是建议你直接去使用TensorFlow.

Keras上手简单,适合初学者,不需要设计矩阵运算,而TensorFlow上手比较困难,需要自行设计矩阵运算.

你可能感兴趣的:(机器学习)