深度学习框架性能对比分析

下图总结了绝大多数Github上的开源深度学习框架项目,根据项目在Github的Star数量来评级,数据采集于2017年5月初。

图片描述


TensorFlow

TensorFlow框架的前身是Google的DistBelief V2,是谷歌大脑项目的深度网络工具库,一些人认为TensorFlow是借鉴Theano重构的。

Tensorflow一经开源,马上引起了大量开发者的跟进。Tensorflow广泛支持包括图像、手写字、语音识别、预测和自然语言处理等大量功能。TensorFlow遵循Apache 2.0开源协议。

TensorFlow在2017年2月15号发布了其1.0版本,这个版本是对先前八个不完善版本的整合。以下是TensorFlow取得成功的一些列原因:

TensorFLow提供这些工具:

  • TensorBroad是一个设计优良的可视化网络构建和展示工具;
  • TensorFlow Serving通过保持相同的服务器架构和API,可以方便地配置新算法和环境。TensorFlow Serving 还提供开箱即用的模型,并且可以轻松扩展以支持其他的模型和数据。

TensorFlow编程接口包括Python和C++,Java,Go,R和Haskell语言的接口也在alpha版中支持。另外,TensorFlow还支持谷歌和亚马逊的云环境。

TensorFlow的0.12版本支持Windows 7, 8, Server 2016系统。由于采用C++ Eigen库,TensorFlow类库可以在ARM架构平台上编译和优化。这意味着你可以不需要额外实现模型解码器或者Python解释器就可以在多种服务器和移动设备上部署训练好的模型。

TensorFlow提供细致的网络层使用户可以构建新的复杂的层结构而不需要自己从底层实现它们。子图允许用户查看和恢复图的任意边的数据。这对复杂计算的Debug非常有用。

分布式TensorFlow在0.8版本推出,提供了并行计算支持,可以让模型的不同 部分在不同设备上并行训练。

TensorFlow在斯坦福大学,伯克利学院,多伦多大学和Udacity(2016年3月成立的在线学校)均有教学。

TensorFlow的缺点有:

  • 每个计算流必须构建成图,没有符号循环,这样使得一些计算变得困难;
  • 没有三维卷积,因此无法做视频识别;
  • 即便已经比原有版本(0.5)快了58倍,但执行性能仍然不及它的竞争者。

Caffe

Caffe是贾扬清的作品,目前,贾扬清是Facebook AI平台的Lead。始于2013年末,Caffe可能是第一个主流的工业级的深度学习工具包。Caffe具有卓越的卷积模型,是计算机视觉领域最受欢迎的工具之一,且2014年ImageNet 大赛的获奖作品使用的就是Caffe框架。Caffe遵循BSD 2-Clasuse 协议。

Caffe的高速使得它非常适合于科研和商业领域。利用一个NVIDIA K40 GPU,Caffe可以每天处理60M张图片,即推断1毫秒一张,训练4毫秒一张。使用最新的版本,甚至可以更快。

Caffe底层是用C++实现的,可以在各种设备上编译。Caffe是跨平台的并且提供Windows接口,它提供C++,Python和Matlab语言接口。Caffe拥有着庞大的用户社区,并且有大量深度网络模型在社区上贡献,被称为“Model Zoo”。其中,AlexNet和GoogleNet是最著名的两个。

Caffe是视觉识别的流行框架,然而Caffe不提供像TensorFlow,CNTK或Theano一样细粒度的层结构。你必须编写底层代码来构建复杂的层结构。由于它的固有架构,Caffe对循环网络和语言模型的支持不力。


Caffe2

贾扬清和他的团队目前在Facebook致力于Caffe2的研发。2017年4月18号,Facebook基于BSD协议开源了Caffe2。Caffe2聚焦于模块化,在移动设备和大规模部署均表现出色。和TensorFlow一样,Caffe2页使用C++ Eigen以支持ARM架构。

Caffe的模型可以通过脚本轻松转化成Caffe2模型。Caffe在设计上的倾向使得它特别适合视觉相关的问题,Caffe2沿袭了它对视觉问题的强大支持,同时还加入了RNN和LSTM以更好地支持自然语言处理,手写字识别和时间序列预测。

可以预见在不远的将来Caffe2将会替代Caffe在深度学习社区的地位。


Microsoft Cognitive Toolkit

Microsoft Cognitive Toolkit(CNTK)设计的初衷是用于语音识别领域。CNTK支持RNN(循环神经网络)和CNN(卷积神经网络),因此他有能力胜任图像、手写字和语音识别问题。CNTK支持64位Linux和Windows系统,提供Python和C++语言接口,遵循MIT协议。

CNTK与TensorFlow和Theano有着类似的设计理念——把网络定义成向量操作的语义图,向量操作例如矩阵加法、矩阵乘法以及卷积。同时,CNTK也提供细粒度的网络层设计,允许用户使用它们设计新的复杂网络。

和Caffe一样,CNTK底层也是C++实现并具有跨平台CPU/GPU支持。搭载在Azure GPU Lab上,CNTK能发挥出最高的分布式计算性能。目前,CNTK由于不支持ARM架构,限制了其在移动端的应用。


MXNet

MXNet源自于卡内基梅隆大学和华盛顿大学。MXNet是一个极具特色,可编程,可扩展的深度学习框架。MXNet可以混合多种语言的模型和代码,包括Python, C++, R, Scala, Julia, Matlab, JavaScript。2017年1月30号,MXNet被纳为Apache基金会孵化项目。

MXNet支持CNN、RNN、LSTM, 提供对图像,手写字,语音识别,预测和自然语言问题的强大支持。有人认为,MXNet是世界上最好的图像分类器。

MXNet具有出色的可扩展性,例如GPU并行计算,存储映像,高速开发和可移植性。另外,MXNet可以和Apache Hadoop YARN结合,YARN是一个通用分布式应用管理框架,这一特性使得MXNet成为TensorFlow的竞争者。

MXNet的一个独特之处是它是少有的几个支持对抗生成网络(GAN)的框架之一。这个模型被用于实验经济学方法中的“纳什均衡”。

另一个特殊之处是,亚马逊的CTO Werner Vogels宣布了对MXNet的支持:“今天,我们宣布MXNet将成为亚马逊的深度学习框架选择。我们将在现有和未来将出现的服务中使用MXNet。”苹果公司的部分传闻也表示该公司将会使用MXNet作为其深度学习框架。


Torch

Torch由Facebook的Royan Collobert、Soumith Chintala、曾任于Twitter现任于Nvidia的Clement Farabet和Google Deep Mind 的Koray Kavukcuoglu共同开发。其主要贡献者是Facebook、Twitter和Nvidia。 Torch遵守BSD 3 clause 开源协议。然而,Facebook近期宣布将转向Caffe2作为其首选深度学习框架因为它支持移动设备开发。

Torch由Lua语言实现,Lua是一种小众语言,因此若你不熟悉这门语言,会影响到整个工作的效率。

Torch缺少像TensorFlow、MXNet on YARN和Deeplearning4J那样的的分布式支持,缺少多种语言接口同样限制了它的受众。


DeepLearning4J

DeepLearning4J(DL4J)是基于Apache 2.0协议的分布式开源神经网络类库,它由Java和Scala实现。DL4J是SkyMind的Adam Gibson开发的,它是唯一的商品级深度学习网络,可以和Hadoop、Spark结合构建多用户多线程服务。DL4J是唯一使用Map-Reduce训练网络而使用其他类库进行大规模矩阵操作的框架。

DL4J拥有内建的GPU支持,这一重要特性能够支持YARN上的训练过程。DL4J拥有丰富的深度神经网络架构支持,包括RBM,DBN,CNN,RNN,RNTN和LSTM。DL4J还支持一个向量计算库——Canova。

由于是由Java实现,DL4J先天比Python块,它使用多GPU执行图像识别任务和Caffe一样快。该框架可以出色完成图像识别,欺诈检测和自然语言处理任务。


Theano

Theano主要由蒙特利尔大学学习算法研究所(MILA)创立。Yoshua Bengio是Theano的开创者,同时领导这个实验室,该实验室在深度学习研究领域做出巨大的贡献,培养出约100名相关学生和从业者。Theano支持高效机器学习算法的快速开发,遵守BSD开源协议。

Theano不像TensorFlow那样优雅,但它提供了支持循环控制(被称为scan)的API,可以轻松实现RNN。

Theano提供多种支持手写字识别、图像分类(包括医学图像)的卷积模型。Theano还提供三维卷积和池化用于视频分类。在语言方面,Theano能胜任例如理解、翻译和生成等自然语言处理任务。Theano还支持生成对抗网络(GAN),GAN即是由MILA的一位学生提出的。

Theano支持多GPU并行计算并且自带分布式框架。Theano只支持一种开发语言,比TensorFlow速度快很多,是一种学术研究的有力工具。然而,其不支持移动平台以及没有多种语言接口的缺陷限制了它在企业的广泛应用。

你可能感兴趣的:(IT杂谈日记,机器学习,深度学习)