开源深度学习平台 TensorFlowCaffeMXNet……哪个最适合你

Posted 新智元

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源深度学习平台 TensorFlowCaffeMXNet……哪个最适合你相关的知识,希望对你有一定的参考价值。

 新智元推荐

来源: deeplearning4j.org 等



:COO、执行总编、主编、高级编译、主笔、运营总监、客户经理、咨询总监、行政助理等 9 大岗位全面开放。 

简历投递:jobs@aiera.com.cn

HR 微信:13552313024

新智元为COO和执行总编提供最高超百万的年薪激励;为骨干员工提供最完整的培训体系、高于业界平均水平的工资和奖金。

加盟新智元,与人工智能业界领袖携手改变世界。



【新智元导读】本文选自开源深度学习项目 Deeplearning4j (DL4J)博客,文章虽然着重介绍自家产品,但内容仍然值得借鉴。与其他项目相比,DL4J 在编程语言和宗旨两方面都独具特色。本文同时收录其他开源深度学习框架介绍,包括最近被亚马逊选中而备受关注的 MXNet。



Deeplearning4j (简称 DL4J)不是第一个开源的深度学习项目,但与此前的其他项目相比,DL4J 在编程语言和宗旨两方面都独具特色。DL4J 是基于 JVM、聚焦行业应用且提供商业支持的分布式深度学习框架,其宗旨是在合理的时间内解决各类涉及大量数据的问题。它与 Hadoop 和 Spark 集成,可使用任意数量的 GPU 或 CPU 运行。

 

目录


  • TensorFlow

  • Theano、Pylearn2 及其生态系统

  • Torch

  • Caffe

  • CNTK

  • DSSTNE、MXNet

  • 许可

  • 速度

  • DL4J:为什么用 Java?

  • DL4J:生态系统

  • DL4S:基于 Scala 语言的深度学习

  • PaddlePaddle 等机器学习框架



TensorFlow



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


和大多数深度学习框架一样,TensorFlow 是用一个 Python API 编写的,通过 C/C++ 引擎加速。这种解决方案并不适合 Java 和 Scala 用户群。


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


谷歌似乎也已承认 TF 的目标是招募人才。众所周知,他们最近公布了为期一年的谷歌大脑(Google Brain)人才培训项目。真是明智的举措。


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


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


TensorFlow 的利与弊


  • (+) Python + NumPy

  • (+) 与 Theano 类似的计算图抽象化

  • (+) 编译时间比 Theano 快很多

  • (+) 用 TensorBoard 进行可视化

  • (+) 同时支持数据并行和模型并行

  • (-) 速度比其他框架慢

  • (-) 比 Torch 笨重许多;更难理解

  • (-) 已预定型的模型不多

  • (-) 计算图纯粹基于 Python,所以速度较慢



Theano及其生态系统



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


现在已有大量基于 Theano 的开源深度学习库,包括 Keras、 Lasagne 和 Blocks。这些学习库试着在 Theano 有时不够直观的界面之上添加一层便于使用的 API。


相比之下,Deeplearning4j 的目标是成为深度学习领域的 Scikit-learn,力求以可扩展、多个 GPU 或 CPU 并行的方式让尽可能多的控制点实现自动化,在需要时与 Hadoop 和 Spark 集成。


Theano 的 利与弊


  • (+) Python + NumPy

  • (+) 计算图是良好的抽象化方式

  • (+) RNN 与计算图匹配良好

  • (+) 高级的包装界面(Keras、Lasagne)减少了使用时的麻烦

  • (-) 原始的 Theano 级别偏低

  • (-) 错误信息可能没有帮助

  • (-) 大型模型的编译时间可能较长

  • (-) 比 Torch 笨重许多;更难理解

  • (-) 对已预定型模型的支持不够完善



Torch



Torch 是用 Lua 编写的计算框架,支持机器学习算法。谷歌 DeepMind、Facebook 等大型科技公司使用 Torch 的某些版本,由内部团队专门负责定制自己的深度学习平台。Lua 是上世纪九十年代早期在巴西开发的多范例脚本语言。


Torch7 虽然功能强大,但其设计并不适合在两个群体中大范围普及,即主要依赖 Python 的学术界,以及普遍使用 Java 的企业软件工程师。Deeplearning4j用Java编写,反映了我们对行业应用和使用便利的重视。我们认为可用性是阻碍深度学习实施工具广泛普及的限制因素。我们认为可扩展性应当通过Hadoop和Spark这样的开源分布式运行时系统来实现自动化。我们还认为,从确保工具正常运作和构建社区两方面来看,提供商业支持的开源框架是最恰当的解决方案。


Torch 的利与弊:


  • (+) 大量模块化组件,容易组合

  • (+) 很容易编写自己的层类型并在GPU上运行

  • (+) Lua.;) (大多数学习库的代码是Lua,容易读取)

  • (+) 有很多已预定型的模型!

  • (-) Lua

  • (-) 通常需要自己编写定型代码(即插即用相对较少)

  • (-) 不适合递归神经网络



Caffe



Caffe 是一个广为人知、广泛应用的机器视觉库,将Matlab实现的快速卷积网络移植到了 C 和 C++ 平台上。Caffe 不适用于文本、声音或时间序列数据等其他类型的深度学习应用。与本文提到的其他一些框架相同,Caffe 选择了 Python 作为其 API。


Deeplearning4j 和 Caffe 都可以用卷积网络进行图像分类,这是最先进的技术。与 Caffe 不同,Deeplearning4j 支持任意芯片数的 GPU 并行运行,并且提供许多看似微不足道,却能使深度学习在多个并行 GPU 集群上运行得更流畅的功能。虽然在论文中被广泛引述,但 Caffe 主要用于为其 Model Zoo 网站提供已预定型的模型。Deeplearning4j 正在开发将 Caffe 模型导入 Spark 的开发解析器。


Caffe 的利与弊:


  • (+) 适合前馈网络和图像处理

  • (+) 适合微调已有的网络

  • (+) 定型模型而无需编写任何代码

  • (+) Python界面相当有用

  • (-) 需要用C++ / CUDA编写新的GPU层

  • (-) 不适合递归网络

  • (-) 用于大型网络(GoogLeNet、ResNet)时过于繁琐



CNTK



CNTK 是微软的开源深度学习框架。CNTK 的全称是“计算网络工具包”。此学习库包括前馈 DNN、卷积网络和递归网络。CNTK 提供基于 C++ 代码的 Python API。虽然 CNTK 遵循一个比较宽松的许可协议,却并未采用 ASF 2.0、BSD 或 MIT 等一些较为传统的许可协议。



DSSTNE、MXNet



亚马逊的深度可伸缩稀疏张量网络引擎又称 DSSTNE,是用于机器学习和深度学习建模的学习库。它是众多最新的开源深度学习库之一,在 Tensorflow 和 CNTK 之后发布。 DSSTNE 主要用 C++ 写成,速度较快,不过吸引到的用户群体规模尚不及其他学习库。


由此,亚马逊首席技术官 Werner Vogels 在上周二示,亚马逊网络服务公司(AWS)刚刚选择 MXNet 作为其最主要的深度学习框架。


MXNet 同 Keras 一样是高级库,但它的优势在另外的方面。


MXNet 作为 2016 年的开源新秀之一,MXNet 值得注意的特征是其紧凑的大小和跨平台的可移植性。亚马逊 CTO Vogels 称赞 MXNet 核心库使用单一 C ++ 源文件,androidios 都可以编译。开发人员还可以使用多种语言:Python,C ++,R,Scala,Julia,Matlab和javascript


一方面,使用 MXNet 构建网络比用 Keras 需要花更多功夫。由于教程少,学习的难度更大。 但是,MXNet 支持超过 7 种不同的语言的优势弥补了这一点,这些语言包括 C++、Python、R、Javascrip,甚至 Matlab。


MXNet 的另一个明显的优势是支持分布式计算。这意味着如果你需要在多个 CPU 或 GPU 上训练模型以提高速度,MXNet 是很好的选择。


可扩展性也可能是亚马逊被 MXNet 吸引最大的原因。Vogels 使用 Inception v3 图像分析算法分析了 MXNet 训练吞吐量的基准,声称通过在多个 GPU 上运行它获得的加速是是呈高度线性的——在128个GPU上,MXNet 的运行速度比在单个 GPU 上快109倍。



许可



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



速度



Deeplearning4j 依靠 ND4J 进行基础的线性代数运算,事实表明其处理大矩阵乘法的速度至少是 NumPy 的两倍。这正是 DL4J 被 NASA 的喷气推进实验室所采用的原因之一。此外,Deeplearning4j 为多芯片运行而优化,支持采用 CUDA C 的 x86 和 GPU。


虽然 Torch7 和 DL4J 都采用并行运行,DL4J 的并行运行是自动化的。我们实现了从节点(worker nodes)和连接的自动化设置,让用户在 Spark、Hadoop 或 Akka 和 AWS 环境中建立大型并行网络时可以绕过学习库。Deeplearning4j 最适合快速解决具体问题。



DL4J:为什么用Java?



经常有人问我们,既然有如此之多的深度学习用户都专注于 Python,为什么还选择 Java 来实施开源深度学习项目。的确,Python 有着优越的语法要素,可以直接将矩阵相加,而无需像Java那样先创建显式类。Python 还有由 Theano、NumPy 等原生扩展组成的广泛的科学计算环境。


但 Java 也具备不少优点。首先,Java 语言从根本上看要快于 Python。如不考虑依赖用Cython 加速的情况,任何用 Python 写成的代码在根本上速度都相对较慢。不可否认,运算量最大的运算都是用 C 或 C++ 语言编写的。(此处所说的运算也包括高级机器学习流程中涉及的字符和其他任务。)大多数最初用 Python 编写的深度学习项目在用于生产时都必须重新编写。Deeplearning4j 依靠 JavaCPP 从 Java 中调用预编译的本地 C++ 代码,大幅提升定型速度。


其次,大型企业主要使用 Java 或基于 JVM 的系统。在企业界,Java 依然是应用范围最广的语言。Java 是 Hadoop、Hive、Lucene 和 Pig 的语言,而它们恰好都是解决机器学习问题的有用工具。也就是说,深度学习本可以帮助许多需要解决现实问题的程序员,但他们却被语言屏障阻碍。我们希望提高深度学习对于这一广大群体的可用性,这些新的用户可以将深度学习直接付诸实用。


第三,为了解决 Java 缺少强大的科学计算库的问题,我们编写了 ND4J。ND4J 在分布式CPU 或 GPU 上运行,可以通过 Java 或 Scala 的 API 进行对接。


最后,Java 是一种安全的网络语言,本质上具有跨平台的特点,可在 Linux 服务器、Windows 和 OSX 桌面、安卓手机上运行,还可通过嵌入式 Java 在物联网的低内存传感器上运行。Torch 和 Pylearn2 通过 C++ 进行优化,优化和维护因而存在困难,而 Java 则是“一次编写,随处运行”的语言,适合需要在多个平台上使用深度学习系统的企业。



DL4J:生态系统



生态系统也是为 Java 增添人气的优势之一。Hadoop 是用 Java 实施的;Spark 在Hadoop 的 Yarn 运行时中运行;Akka 等开发库让我们能够为 Deeplearning4j 开发分布式系统。总之,对几乎所有应用而言,Java 的基础架构都经过反复测试,用 Java 编写的深度学习网络可以靠近数据,方便广大程序员的工作。Deeplearning4j 可以作为 YARN 的应用来运行和预配。


Scala、Clojure、Python 和 Ruby 等其他通行的语言也可以原生支持 Java。我们选择Java,也是为了尽可能多地覆盖主要的程序员群体。


虽然 Java 的速度不及 C 和 C++,但它仍比许多人想象得要快,而我们建立的分布式系统可以通过增加节点来提升速度,节点可以是 GPU 或者 CPU。也就是说,如果要速度快,多加几盒处理器就好了。


最后,我们也在用 Java 为 DL4J 打造 NumPy 的基本应用,其中包括 ND-Array。我们相信 Java 的许多缺点都能很快克服,而其优势则大多会长期保持。



DL4S:基于 Scala 语言的深度学习



我们在打造 Deeplearning4j 和 ND4J 的过程中特别关注 Scala,因为我们认为 Scala 具有成为数据科学主导语言的潜力。用 Scala API 为 JVM 编写数值运算、向量化和深度学习库可以帮助整个群体向实现这一目标迈进。



PaddlePaddle 等机器学习框架



上文提到的深度学习框架都是比较专业化的框架,此外还有许多通用型的机器学习框架。这里列举主要的几种:


  • sci-kit learn-Python的默认开源机器学习框架。

  • Apache Mahout-Apache的主打机器学习框架。Mahout可实现分类、聚类和推荐。

  • SystemML-IBM的机器学习框架,可进行描述性统计、分类、聚类、回归、矩阵参数化和生存分析,还包括支持向量机。

  • 微软DMTK-微软的分布式机器学习工具包。分布式词嵌入和LDA。






新智元招聘


职位  运营总监


职位年薪:36- 50万(工资+奖金)

工作地点:北京-海淀区

所属部门:运营部

汇报对象:COO

下属人数:2人

年龄要求:25 岁 至 35 岁

性别要求:不限

工作年限:3 年以上

语  言:英语6级(海外留学背景优先)


职位描述


  1. 负责大型会展赞助商及参展商拓展、挖掘潜在客户等工作,人工智能及机器人产业方向

  2. 擅长开拓市场,并与潜在客户建立良好的人际关系

  3. 深度了解人工智能及机器人产业及相关市场状况,随时掌握市场动态 

  4. 主动协调部门之间项目合作,组织好跨部门间的合作,具备良好的影响力

  5. 带领团队完成营业额目标,并监控管理项目状况

  6. 负责公司平台运营方面的战略计划、合作计划的制定与实施


岗位要求


  1. 大学本科以上学历,硕士优先,要求有较高英语沟通能力

  2. 3年以上商务拓展经验,有团队管理经验,熟悉商务部门整体管理工作

  3. 对传统全案公关、传统整合传播整体方案、策略性整体方案有深邃见解

  4. 具有敏锐的市场洞察力和精确的客户分析能力、较强的团队统筹管理能力

  5. 具备优秀的时间管理、抗压能力和多任务规划统筹执行能力

  6. 有广泛的TMT领域人脉资源、有甲方市场部工作经验优先考虑

  7. 有媒体广告部、市场部,top20公关公司市场拓展部经验者优先



以上是关于开源深度学习平台 TensorFlowCaffeMXNet……哪个最适合你的主要内容,如果未能解决你的问题,请参考以下文章

百度paddlepaddle深度学习平台全套入门教程 ‖ 资源

基于PaddlePaddle开源深度学习框架平台

干货Paddle:百度拥抱世界,开源其深度学习软件平台

Paddle v0.11.0 发布,百度深度学习开源平台

专访百度 PaddlePaddle 开源平台负责人王益:国产深度学习平台是如何帮助开发者快速开发 AI 产品的?

码农们注意!国内首个深度学习开源平台百度PaddlePaddle来了!