[转载]机器学习和深度学习最佳框架大比拼

机器学习和深度学习最佳框架大比拼

原文链接1https://www.oschina.net/news/81599/frameworks-for-machine-learning-and-deep-learning
原文链接2https://blog.csdn.net/qq_41396296/article/details/79398292

 

在过去的一年里,咱们讨论了六个开源机器学习和/或深度学习框架:Caffe,Microsoft Cognitive Toolkit(又名CNTK 2),MXNet,Scikit-learn,Spark MLlib和TensorFlow。如果把网撒得大些,可能还会覆盖其他几个流行的框架,包括Theano(一个10年之久的Python深度学习和机器学习框架),Keras(一个Theano和TensorFlow深度学习的前端),DeepLearning4j(Java和Scala在Hadoop和Spark之上的深度学习软件)。如果你有兴趣使用机器学习和神经网络,你从来没有像现在这样多的选择。

机器学习框架和深度学习框架之间有区别。本质上,机器学习框架涵盖用于分类,回归,聚类,异常检测和数据准备的各种学习方法,并且其可以或可以不包括神经网络方法。深度学习或深度神经网络(DNN)框架涵盖具有许多隐藏层的各种神经网络拓扑。这些层包括模式识别的多步骤过程。网络中的层越多,可以提取用于聚类和分类的特征越复杂。

Caffe,CNTK,DeepLearning4j,Keras,MXNet和TensorFlow是深度学习框架。 Scikit-learning和Spark MLlib是机器学习框架。 Theano跨越了这两个类别。

一般来说,深层神经网络计算在GPU(特别是Nvidia CUDA通用GPU,大多数框架)上运行的速度要比CPU快一个数量级。一般来说,更简单的机器学习方法不需要GPU的加速。

虽然你可以在一个或多个CPU上训练DNN,训练往往是缓慢的,慢慢我不是说秒或分钟。需要训练的神经元和层数越多,可用于训练的数据越多,需要的时间就越长。当Google Brain小组在2016年针对新版Google翻译训练语言翻译模型时,他们在多个GPU上同时运行了一周的训练时间。没有GPU,每个模型训练实验将需要几个月。

这些框架中每一个框架具有至少一个显著特征。 Caffe的强项是用于图像识别的卷积DNN。 Cognitive Toolkit有一个单独的评估库,用于部署在ASP.Net网站上工作的预测模型。 MXNet具有良好的可扩展性,可用于多GPU和多机器配置的训练。 Scikit-learn具有广泛的强大的机器学习方法,易学已用。 Spark MLlib与Hadoop集成,具有良好的机器学习可伸缩性。 TensorFlow为其网络图TensorBoard提供了一个独特的诊断工具。

另一方面,所有深度学习框架在GPU上的训练速度几乎相同。这是因为训练内循环在Nvidia CuDNN包中花费大部分时间。然而,每个框架采用一种不同的方法来描述神经网络,具有两个主要的阵营:使用图形描述文件的阵营,以及通过执行代码来创建它们的描述的阵营。

考虑到这一点,让我们来看看每一个框架的特性。

Caffe(咖啡) 

Caffe深度学习项目,最初是一个强大的图像分类框架,似乎停滞不前,基于它的持续的bug,以及它已被卡住1.0版RC3一年多的事实,并且创始人已离开项目。它仍然有良好的卷积网络图像识别和良好的支持Nvidia CUDA GPU,以及一个简单的网络描述格式。另一方面,它的模型通常需要大量的GPU内存(超过1GB)运行,它的文档是多斑点和问题,支持很难获得,安装是iffy,特别是对于它的Python笔记本支持。

Caffe有命令行,Python和Matlab接口,它依靠ProtoText文件来定义它的模型和求解器。 Caffe在其自己的模型模式中逐层定义网络。网络定义从输入数据到丢失的整个模型。当数据和派生数据在前向和后向遍历网络时,Caffe存储,通信和操作信息为blob(二进制大对象),内部是以C连续方式存储的N维数组(表示行该数组被存储在连续的存储器块中,如在C语言中)。 Blob之于Caffe如Tensor之于TensorFlow。

图层对blob执行操作,并构成Caffe模型的组件。层卷积滤波器,执行池,取内部乘积,应用非线性(诸如整流线性和S形以及其他元素方面的变换),归一化,加载数据和计算诸如softmax和铰链的损失。

Caffe已经证明其在图像分类中的有效性,但它的时刻似乎已经过去了。除非现有的Caffe模型符合您的需要,或者可以根据您的目的进行微调,我建议使用TensorFlow,MXNet或CNTK。

在NBViewer中显示的预先计算的CaffeJupyter笔记本。这本笔记本解释了使用一只可爱的小猫在Caffe网络上做“手术”。

Microsoft Cognitive Toolkit(Microsoft认知工具包)

Microsoft Cognitive Toolkit是一个快速,易用的深度学习软件包,但与TensorFlow相比,其范围有限。它有各种各样的模型和算法,极好的支持Python和Jupyter笔记本,一个有趣的声明性神经网络配置语言BrainScript,以及在Windows和Ubuntu Linux环境下自动部署。

在缺点方面,当我审查Beta 1的文档还没有完全更新到CNTK 2,并且包没有对MacOS支持。虽然自Beta 1以来,CNTK 2有许多改进,包括新的内存压缩模式,以减少GPU和新的Nuget安装包的内存使用,但对MacOS支持仍然缺失。

为Beta 1添加的PythonAPI有助于将认知工具包带入主流的、用Python码的、深度学习研究人员当中。 API包含模型定义和计算、学习算法、数据读取和分布式训练的抽象。作为PythonAPI的补充,CNTK 2具有新的Python示例和教程,以及对 Google Protocol Buffer序列化的支持。教程以Jupyter笔记本实现。

CNTK 2组件可以处理来自Python,C ++或BrainScript的多维密集或稀疏数据。认知工具包包括各种各样的神经网络类型:FFN(前馈),CNN(卷积),RNN/ LSTM(递归/长期短期记忆),批次标准化和序列注意序列。它支持强化学习,生成对抗网络,监督和非监督学习,自动超参数调整,以及从Python添加新的,用户定义的核心组件在GPU上运行的能力。它能够在多个GPU和机器上做到精确的并行性,而且(微软声称)它甚至可以适应最大的模型到GPU内存。

CNTK 2 API支持从Python,C ++和BrainScript定义网络,学习者,读者,培训和评估。他们还支持使用C#进行评估。 Python API与NumPy互操作,并包括一个高级层级库,可以精确定义包括复现在内的高级神经网络。该工具包支持以符号形式表示循环模型作为神经网络中的循环,而不需要静态展开循环步骤。

您可以在Azure网络和GPU上训练CNTK 2模型。配备GPU的N系列Azure虚拟机系列,在我审核Beta 1时受到限制,现在通常可以从Azure控制台获得并完全管理。

几个CNTK 2 / Microsoft Cognitive Toolkit教程以Jupyter笔记本提供。该图显示了Logistic回归训练的绘制的可视化。

MXNet

MXNet是一个可移植的、可伸缩的深度学习库,是亚马逊的DNN框架的选择,结合了神经网络几何的象征性声明与张量操作的命令性编程。 MXNet可跨多个主机扩展到多个GPU,接近线性扩展效率为85%,具有出色的开发速度、可编程性和可移植性。它支持Python,R,Scala,Julia和C ++,支持程度各不相同,它允许你混合符号和命令式编程风格。

在我第一次评论MXNet时,文档感觉还没有完成,除Python之外,我发现很少有其它语言的例子。自从我评论以后,这两种情况都有所改善。

MXNet平台是建立在一个动态依赖调度器上的,它可以自动并行化符号和命令式操作,但是你必须告诉MXNet要使用哪些GPU和CPU核心。在调度器顶部的图优化层使符号执行快速和内存高效。

MXNet目前支持用Python,R,Scala,Julia和C ++构建和训练模型;训练的MXNet模型也可以用于Matlab和JavaScript中的预测。无论您选择哪种语言来构建模型,MXNet都会调用优化的C ++后端引擎。

MXNet作者认为他们的API是Torch、Theano、Chainer和Caffe提供的一个超集,尽管对GPU集群有更多的可移植性和支持。在许多方面MXNet类似于TensorFlow,但增加了嵌入命令张量操作的能力。

除了实际强制的MNIST数字分类之外,MXNet教程的计算机视觉包含使用卷积神经网络(CNN)的图像分类和分割,使用更快的R-CNN的对象检测,神经艺术和使用深度CNN的大规模图像分类和ImageNet数据集。还有自然语言处理、语音识别、对抗网络以及监督和非监督机器学习的其他教程。

亚马逊测试了在P2.16xlarge实例上的MXNet中实现的Inception v3算法,发现其伸缩效率为85%。

Scikit-learn

Scikit-learn Python框架具有广泛的可靠的机器学习算法,但没有深度学习算法。如果你是一个Python粉丝,Scikit-learn可能是一般机器学习库中最佳选择。

Scikit-learn是一个强大的,成熟的机器学习Python库,包含各种各样成熟的算法和集成图。它相对容易安装、学习和使用,带有很好的例子和教程。

在另一方面,Scikit-learn不包括深度学习或强化学习,缺少图模型和序列预测,并且除Python之外,不能真正使用其它语言。它不支持PyPy,Python即时编译器或GPU。也就是说,除了它的少量进入神经网络,它不会真的有速度问题。它使用Cython(Python到C编译器)来处理需要快速的函数,例如内循环。

Scikit-learn对分类、回归、聚类、降维、模型选择和预处理算法具有很好的选择。它有所有这些的良好的文档和示例,但没有任何种类的指导工作流以完成这些任务。

Scikit-learn赢得了易于开发的最高分,主要是因为算法都像广告和文档一样工作,API是一致的,设计良好,数据结构之间几乎没有“阻抗不匹配”。函数库其中的功能已彻底充实,错误彻底消除,用来开发十分愉快。

本示例使用Scikit-learn的小手写数字数据集来演示使用Label Spreading模型的半监督学习。在1,797总样本中只有30个被标记。

另一方面,函数库没有涵盖深度学习或强化学习,这隐藏了当前困难但重要的问题,例如准确的图像分类和可靠的实时语言解析和翻译。显然,如果你对深度学习感兴趣,你应该另觅他处。

然而,存在许多问题,从建立链接不同观察值的预测函数到分类观察值到学习未标记数据集的结构,这使得它们适应于普通的老的机器学习,而不需要数十层的神经元,对于这些领域 Scikit-learn 是非常好的选择。

Spark MLlib

Spark MLlib是Spark的开源机器学习库,提供了通用的机器学习算法,如分类、回归、聚类和协同过滤(但不包括DNN)以及特征提取、转换、维数降低工具,以及构建、评估和调整机器学习管道选择和工具。Spark MLlib还包括用于保存和加载算法、模型和管线、用于数据处理以及进行线性代数和统计的实用程序。

Spark MLlib是用Scala编写的,并使用线性代数包Breeze。 Breeze依靠netlib-java来优化数值处理,虽然在开源分布中意味着优化使用CPU。 Databricks提供与GPU配合使用的定制Spark集群,这有可能为您带来另一个10倍的速度改进,用于训练具有大数据的复杂机器学习模型。

MLlib实现了大量的分类和回归的常用算法和模型,新手可能变得混乱不堪,无可适从,但专家最终可能会为分析数据找到一个很好的模型的数据。对于这么多的模型Spark2.x增加了超参数调优的重要特性,也称为模型选择。超参数t允许调优分析人员设置参数网格、估计器和评估器,并且它允许交叉验证方法(耗时但准确)或训练验证分割方法(更快但不太准确)找到最佳数据模型。

Spark MLlib拥有针对Scala和Java的完整API,主要是针对Python的完整API以及针对R的粗略部分API。您可以通过计算示例来获得良好的覆盖率:54个Java和60个Scala机器学习示例,52个Python机器学习示例,只有五个R示例。在我的经验中,Spark MLlib是最容易使用Jupyter笔记本,但你可以肯定地在控制台运行它,如果你驯服详细的Spark状态消息。

Spark MLlib提供了你想要的基本机器学习、特性选择、管道和持久性的任何东西。它在分类、回归、聚类和过滤方面做得相当不错。鉴于它是Spark的一部分,它具有访问数据库、流和其他数据源的强大访问权限。另一方面,SparkMLlib并不真正采用与TensorFlow,MXNet,Caffe和Microsoft Cognitive Toolkit相同的方式建模和训练深层神经网络。

Spark MLlibPython示例(Naive Bayes)作为Databricks笔记本。注意解释,代码和输出如何散布。

TensorFlow

TensorFlow,Google的可移植机器学习和神经网络库,执行和伸缩性很好,虽然它有点难学。TensorFlow拥有各种各样的模型和算法,它们对深度学习非常重视,并且在具有GPU(用于训练)或Google TPU(用于生产规模预测)的硬件上具有出色的性能。它还具有对Python的良好支持,良好的文档和良好的软件,用于显示和理解描述其计算的数据流图TensorBoard。

数据流图中的节点表示数学运算,而图的边表示在它们之间流动的多维数据数组(张量)。这种灵活的架构允许您将计算部署到桌面、服务器或移动设备中的一个或多个CPU或GPU,而无需重写代码。

使用TensorFlow的主要语言是Python,虽然对C ++有限的支持。TensorFlow提供的教程包括手写数字分类。图像识别、字嵌入、递归神经网络,用于机器翻译的序列到序列模型、自然语言处理和基于PDE(偏微分方程)的模拟的应用。

TensorFlow可以方便地处理各种神经网络,包括目前正在急剧变化的图像识别和语言处理领域的深度CNN和LSTM递归模型。用于定义图层的代码可能fan,但是您方便但不详细,可以使用三个可选的深度学习界面中的任何一个来修复它。虽然调试异步网络求解器可以是平凡的,但TensorBoard软件可以帮助您可视化图。

TensorBoard显示TensorFlow计算的图形。我们放大了几个部分来检查图形的细节。

总结

对于任何给定的预测任务,您应该使用哪种机器学习或深度学习包取决于机器学习的复杂性,用于训练的数据量和形式,您的计算资源以及您的编程语言偏好和技能。它也可能取决于您是否喜欢使用代码或配置文件定义模型。

但是,在开始自己的模型训练考察之前,您可能希望了解来自Google,HPE和MicrosoftAzure云的任何预先训练的应用机器学习服务是否能够处理您的数据,无论是语音、文本或图像。如果他们对你的数据不能很好地工作,你可能还想在尝试基本的机器学习训练(最后,如果没有其他工作)深度学习训练之前,看看你能用简单的统计方法获得多大的好处。这里的原则是保持分析尽可能简单,但不是更简单。

在我讨论的两个基本的机器学习包,我建议喜欢Scala和在Hadoop中有他们的数据的使用Spark MLlib 。我建议喜欢Python的人Scikit-learn。

我应该提到那些喜欢Scala(和Java)的人和在Hadoop中有他们的数据的人的另一个选择事Deeplearning4j。我没有评论他,但是,因为其名称意味着它是一个学习深度包。

选择Caffe,Microsoft Cognitive Toolkit,MXNet和TensorFlow的深度学习包是一个更困难的决定。我不再建议使用Caffe,因为它的发展停滞不前。然而,选择其他三个中的一个仍然是棘手,因为对于具有类似功能,它们都是最好的选择。

Cognitive Toolkit现在有Python和C ++ API以及网络配置语言BrainScript。如果您喜欢使用配置文件而不是编程网络拓扑,那么CognitiveToolkit可能是一个不错的选择。另一方面,它似乎不像TensorFlow一样成熟,它不能在MacOS上运行。

MXNet支持Python、R、Scala、Julia和C ++,但其支持最好的API是用Python开发的。 MXNet在多个主机上的多个GPU上展示出良好的伸缩性(85%的线性)。当我评论MXNet的文档和示例是吝啬的,但他们已经改进了。

TensorFlow可能是三个包中最成熟的,并且它是一个很好的选择,只要你喜欢编写Python,并可以克服学习曲线。 TensorFlow具有你可以使用基本的构建块,它给你细粒度的控制,但也需要你编写大量的代码来描述一个神经网络。有三个简化的API与TensorFlow一起工作来解决这个问题:tf.contrib.learn,TF-Slim和Keras。支持TensorFlow的最终考虑是TensorBoard,它对于可视化和理解您的数据流图非常有用。

转载自:云头条

原文:http://www.infoworld.com/article/3163525/analytics/review-the-best-frameworks-for-machine-learning-and-deep-learning.html?nsdr=true

本文用Python更新了顶级的AI和机器学习项目。 Tensorflow已经成为了贡献者的三位数增长的第一位。 Scikit-learn下降到第二位,但仍有非常大的贡献者群体。

进入机器学习和人工智能并非易事。考虑到今天可用的大量资源,许多有抱负的专业人员和爱好者发现难以在该领域建立正确的路径。这个领域正在不断发展,我们必须跟上飞速发展的步伐。

经过信息的更新、检查,本文用Python更新了顶级的AI和机器学习项目。Tensorflow已经成为了贡献者的三位数增长的第一位。 Scikit-learn下降到第二位,但仍有非常大的贡献者群体。


这里还是要推荐下小编的Python学习群:483546416,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2017最新的Python资料和0基础入门教程,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。

与2016年相比,贡献者人数增长最快的项目是:

1.TensorFlow增长169%,从493个增加到1324个贡献者

2.Deap,增长86%,从21到39个贡献者

3.Chainer,增长83%,从84到154个贡献者

4.Gensim,增长81%,从145到262个贡献者

5.Neon,增长66%,从47到78个贡献者

6.Nilearn提高了50%,从46个到69个贡献者

2018年的更新:

1.Keras,629名贡献者

2.PyTorch,399名贡献者

顶级的20名Python人工智能和机器学习开源项目,你熟悉哪个?

Github上的前20名Python人工智能和机器学习项目

大小与贡献者的数量成正比,颜色代表贡献者数量的变化,红色更高,蓝色更低。雪花形状适用于深度学习项目,否则适用于其他项目。

我们看到像TensorFlow、Theano和Caffe这样的深度学习项目是最受欢迎的项目之一。

顶级的20名Python人工智能和机器学习开源项目,你熟悉哪个?

下面的列表是根据Github上贡献者的数量以降序给出的项目。贡献者人数的变化是相对于2016年发布的前20名Python机器学习的开源项目。

1.TensorFlow最初是由谷歌机器智能研究机构的Google Brain Team的研究人员和工程师开发的。该系统的设计是为了便于机器学习的研究,并使其快速、容易地从研究原型过渡到生产系统。

贡献者:1324(168%),Github 网址:https://github.com/tensorflow/tensorflow

2.Scikit-learn是用于数据挖掘和数据分析的简单而高效的工具,可供所有人访问,并且可在各种环境中重用,基于NumPy、SciPy和matplotlib、开源、商业可用,BSD许可证。

贡献者:1019(39%上),Github网址: https://github.com/scikit-learn/scikit-learn

3.Keras是一种高级神经网络API,用Python编写,能够在TensorFlow、CNTK或Theano上运行。

贡献者:629(新),Github网址: https://github.com/keras-team/keras

4.Python中的PyTorch,张量和动态神经网络以及强劲的GPU加速。

贡献者:399(新),Github网址:https://github.com/pytorch/pytorch

5.Theano允许你高效地定义、优化和评估涉及多维数组的数学表达式。

贡献者:327(24%上),Github网址: https://github.com/Theano/Theano

6.Gensim是一个免费的Python库,它具有可扩展的统计语义,分析用于语义结构的纯文本文档,检索语义相似的文档。

贡献者:262(81%上升),Github网址: https://github.com/RaRe-Technologies/gensim

7.Caffe是一个深思熟虑的表达,速度和模块化的深度学习框架。它由伯克利视觉和学习中心(BVLC)和社区贡献者开发。

贡献者:260(提高21%),Github网址: https://github.com/RaRe-Technologies/gensim

8.Chainer是一个基于Python的深度学习模型的独立开源框架。 Chainer提供灵活、直观和高性能的手段来实施全面的深度学习模型,其中包括最新的模型,如递归神经网络和变分自动编码器。

贡献者:154(上升84%),Github网址: https://github.com/chainer/chainer

9.Statsmodels是一个Python模块,允许用户探索数据,估计统计模型并执行统计测试。描述统计、统计测、绘图功能和结果统计的广泛列表适用于不同类型的数据和每个估算器。

贡献者:144(上升33%),Github网址: https://github.com/statsmodels/statsmodels/

10.Shogun是机器学习工具箱,它提供了广泛的统一和高效的机器学习(ML)方法。该工具箱无缝地允许组合多个数据表示、算法类和通用工具。

贡献者:139(上升32%),Github网址: https://github.com/shogun-toolbox/shogun

11.Pylearn2是一个机器学习库。其大部分功能都建立在Theano之上。这意味着你可以使用数学表达式编写Pylearn2插件(新模型,算法等),Theano将为你优化和稳定这些表达式,并将它们编译为你选择的后端(CPU或GPU)。

贡献者:119(3.5%上),Github网址: https://github.com/lisa-lab/pylearn2

12.NuPIC是一个开源项目,它基于称为分层时间存储器(HTM)的新大脑皮层理论。部分HTM理论已经在应用中实施、测试和使用,HTM理论的其他部分仍在开发中。

贡献者:85(提高12%),Github网址: https://github.com/numenta/nupic

13.Neon是Nervana基于Python的深度学习库。它提供易用性,同时提供最高的性能。

贡献者:78(66%上),Github网址: https://github.com/NervanaSystems/neon

14.Nilearn是一个Python模块,用于在NeuroImaging数据上进行快速简单的统计学习。它利用scikit-learn Python工具箱进行多变量统计,并提供预测建模、分类、解码或连接分析等应用。

贡献者:69(上升50%),Github网址: https://github.com/nilearn/nilearn/branches

15.Orange3是开源机器学习和数据可视化新手,同时也是专家。使用大型工具箱交互式数据分析工作流程。

贡献者:53(上升33%),Github网址: https://github.com/biolab/orange3

16.Pymc是一个python模块,实现贝叶斯统计模型和拟合算法,包括马尔可夫链蒙特卡罗。其灵活性和可扩展性使其适用于大量问题。

贡献者:39(上升5.4%),Github网址: https://github.com/pymc-devs/pymc

顶级的20名Python人工智能和机器学习开源项目,你熟悉哪个?

17.Deap是用于快速原型设计和测试思想的新型演化计算框架。它试图使算法明确、数据结构透明。它与多处理和SCOOP等并行机制完美协调。

贡献者:39(86%上),Github网址: https://github.com/deap/deap

18.Annoy(近似最近邻居Oh Yeah)是一个C ++库,它使用Python绑定来搜索接近给定查询点的空间点。它还创建映射到内存的大型只读基于文件的数据结构,以便许多进程可以共享相同的数据。

贡献者:35(46%上),Github网址: https://github.com/spotify/annoy

19.PyBrain是Python的模块化机器学习库。其目标是为机器学习任务提供灵活、易于使用但仍然强大的算法,以及各种预定义环境来测试和比较的算法。

贡献者:32(3%上),Github网址: https://github.com/pybrain/pybrain

20.Fuel是一个数据管道框架,它为你的机器学习模型提供他们需要的数据。计划由Blocks和Pylearn2神经网络库使用。

贡献者:32(10%上),Github网址:https://github.com/mila-udem/fuel

(贡献者在2018年2月录得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值