许多神经网络框架已经开源多??年,并且有很多支持机器学习和人工智能的专有解决方案。多年来,开发者在Github上发布了一系列机器学习框架,可以支持图像、手写、视频、语音识别、自然语言处理和对象检测,但没有一个框架可以解决你所有的需求。那么如何选择最适合自己的开源框架呢?我希望以下图表和分析以及描述能够启发您选择最适合您业务需求的框架。下图总结了Github上绝大多数的开源深度学习框架项目,按照项目在Github上的Star数进行评级。TensorFlowTensorFlow框架的前身是谷歌的DistBeliefV2,是谷歌大脑项目的深度网络工具库。有人认为TensorFlow是从Theano重构而来的。Tensorflow一经开源,立即吸引了大批开发者跟进。Tensorflow支持广泛的功能,包括图像、手写、语音识别、预测和自然语言处理。TensorFlow遵循Apache2.0开源协议。TensorFLow提供了这些工具:TensorBroad是一个精心设计的可视化网络构建和展示工具;TensorFlowServing可以通过维护相同的服务器架构和API轻松配置新的算法和环境。TensorFlowServing还提供开箱即用的模型,可以轻松扩展以支持其他模型和数据。TensorFlow编程接口包括Python和C++,alpha版本还支持Java、Go、R和Haskell语言接口。此外,TensorFlow还支持谷歌和亚马逊云环境。TensorFlow0.12版本支持Windows7、8和Server2016系统。由于使用了C++Eigen库,TensorFlow类库可以在ARM架构平台上进行编译优化。这意味着您可以在各种服务器和移动设备上部署经过训练的模型,而无需额外实施模型解码器或Python解释器。TensorFlow提供精细的网络层,允许用户构建新的复杂层结构,而无需从头开始实施。子图允许用户从图的任何边缘查看和恢复数据。这对于调试复杂的计算非常有用。分布式TensorFlow在0.8版本推出,提供并行计算支持,允许模型的不同部分在不同设备上并行训练。TensorFlow在斯坦福大学、伯克利学院、多伦多大学和Udacity(于2016年3月推出的在线学校)教授。TensorFlow的缺点是:每个计算流都必须构造成图,没有符号循环,给一些计算带来困难;没有三维卷积,无法做视频识别;尽管它比原始版本(0.5)快58倍,但仍然比其竞争对手表现更差。CaffeCaffe是贾扬清的作品。目前,贾扬清是FacebookAI平台的负责人。Caffe始于2013年底,是一个主流的工业级深度学习工具包。Caffe是计算机视觉领域比较流行的工具之一,2014年ImageNet竞赛的获奖作品就是使用Caffe框架。Caffe遵循BSD2-Clasuse协议。这里推荐一个大数据技术交流圈:658558542,突破技术瓶颈,提升思维能力。Caffe的高速使其非常适合科研和商业领域。使用NVIDIAK40GPU,Caffe每天可以处理6000万张图片,即1毫秒推断一张图片,4毫秒训练一张图片。使用新版本,它可以更快。Caffe底层是用C++实现的,可以在各种设备上编译。Caffe是跨平台的,提供Windows界面,它提供C++、Python和Matlab语言界面。Caffe拥有庞大的用户社区,有大量的深度网络模型贡献给社区,被称为“模型动物园”。其中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。MicrosoftCognitiveToolkitMicrosoftCognitiveToolkit(CNTK)最初是为语音识别而设计的。CNTK支持RNN(递归神经网络)和CNN(卷积神经网络),因此能够处理图像、手写和语音识别问题。CNTK支持64位Linux和Windows系统,提供Python和C++语言接口,遵循MIT协议。CNTK与TensorFlow和Theano有着相似的设计理念——将网络定义为向量运算的语义图,例如矩阵加法、矩阵乘法和卷积。同时,CNTK还提供了细粒度的网络层设计,允许用户使用它们来设计新的复杂网络。和Caffe一样,CNTK的底层也是用C++实现的,具有跨平台的CPU/GPU支持。配备AzureGPULab,CNTK可以实现更高的分布式计算性能。目前由于CNTK不支持ARM架构,在移动端的应用受到限制。MXNetMXNet起源于卡内基梅隆大学和华盛顿大学。MXNet是一个非常有特色、可编程和可扩展的深度学习框架。MXNet可以混合多种语言的模型和代码,包括Python、C++、R、Scala、Julia、Matlab、JavaScript。2017年1月30日,MXNet被Apache基金会接纳为孵化项目。MXNet支持CNN、RNN、LSTM,对图像、手写、语音识别、预测和自然语言问题提供强大支持。MXNet具有出色的可扩展性,如GPU并行计算、存储图像、高速开发和可移植性。另外,MXNet可以与通用的分布式应用管理框架ApachehadoopYARN结合使用。此功能使MXNet成为TensorFlow的竞争对手。MXNet的一个独特之处在于它是为数不多的支持生成对抗网络(GAN)的框架之一。该模型被用作实验经济学方法中的“纳什均衡”。另一个特别的是,亚马逊的CTOWernerVogels宣布支持MXNet:“今天,我们宣布MXNet将成为亚马逊的首选深度学习框架。我们将在现有和未来的服务中使用MXNet。”一些苹果传言还暗示该公司将使用MXNet作为其深度学习框架。TorchTorch由Facebook的RoyanCollobert、SoumithChintala、ClementFarabet(以前在Twitter现在在Nvidia)和GoogleDeepMind的KorayKavukcuoglu共同开发。它的主要贡献者是Facebook、Twitter和Nvidia。Torch遵守BSD3条款开源协议。不过,Facebook最近宣布将改用Caffe2作为其首选的深度学习框架,因为它支持移动设备开发。Torch是用Lua语言实现的。Lua是一门小众语言,所以如果对这门语言不熟悉,会影响整个工作的效率。Torch缺乏像TensorFlow、MXNetonYARN和Deeplearning4J这样的分布式支持,缺乏多语言界面也限制了它的受众。DeepLearning4JDeepLearning4J(DL4J)是一个基于Apache2.0协议的分布式开源神经网络库,由Java和Scala实现。DL4J由SkyMind的AdamGibson开发。它是一个商业级的深度学习网络,可以结合Hadoop和Spark构建多用户、多线程的服务。DL4J是唯一使用Map-Reduce训练网络并使用其他库进行大规模矩阵运算的框架。这里推荐一个大数据技术交流圈:658558542,突破技术瓶颈,提升思维能力。DL4J具有内置的GPU支持,这是支持YARN训练过程的一个重要特性。DL4J对深度神经网络架构有丰富的支持,包括RBM、DBN、CNN、RNN、RNTN和LSTM。DL4J还支持向量计算库——Canova。由于是用Java实现的,DL4J天生就比Python快,而且它使用多个GPU来执行图像识别任务的速度和Caffe一样快。该框架可以很好地执行图像识别、欺诈检测和自然语言处理任务。TheanoTheano最初由蒙特利尔大学的学习算法研究所(MILA)创立。YoshuaBengio是Theano的创始人,领导着这个实验室,在深度学习研究领域做出了巨大贡献,培养了大约100名相关学生和从业者。Theano支持快速开发高效的机器学习算法,遵守BSD开源协议。Theano没有TensorFlow优雅,但它提供了一个支持循环控制(称为扫描)的API,可以轻松实现RNN。Theano提供了多种支持手写识别和图像分类(包括医学图像)的卷积模型。Theano还提供了用于视频分类的3D卷积和池化。在语言方面,Theano能够完成理解、翻译和生成等自然语言处理任务。Theano还支持由MILA的学生提出的生成对抗网络(GAN)。Theano支持多GPU并行计算,自带分布式框架。Theano只支持一种开发语言,速度比TensorFlow快很多,是学术研究的利器。但其不支持移动平台,缺乏多语言界面,限制了其在企业中的广泛应用。开源软件与专有软件之争随着深度学习的成熟,可以预见,我们将见证TensorFlow、Caffe2和MXNet的竞争。与此同时,软件供应商正在提供先进的人工智能产品,让您能够从数据中提取更多价值。问题是:你会购买有专利的人工智能产品,还是会使用开源框架。如果您使用开源框架,您将面临选择最适合您的问题的框架的困难。但是如果你选择专有软件,你将如何制定退出策略?任何选择都需要长期考虑。
