您的位置 首页 IOT

比照深度学习十大结构:TensorFlow 并非最好?

2016年已经过去,BEEVALabs数据分析师RicardoGuerreroGomez-Ol近日在Medium上发表了一篇文章,盘点了目前最流行的深度学习框架。为什么要做这一个盘点呢?他写道:「

  2016 年现已曩昔,BEEVA Labs 数据剖析师 Ricardo Guerrero Gomez-Ol 近来在 Medium 上宣告了一篇文章,盘点了现在最盛行的深度学习结构。为什么要做这一个盘点呢?他写道:「我常听到人们议论深度学习——我该从哪里初步呢?TensorFlow 是现在最盛行的吧?我传闻 Caffe 很常用,但会不会太难了?在 BEEVA Labs,咱们常常需求应对许多不同的深度学习库,所以我期望能够将咱们的发现和感触共享出来,协助那些刚刚进入深度学习这一美丽国际的人。」

  TensorFlow

  链接:https://www.tensorflow.org/

  关于那些传闻过深度学习但还没有过分专门深化的人来说,TensorFlow 是他们最喜爱的深度学习结构,但在这儿我要弄清一些现实。

  在 TensorFlow 的官网上,它被界说为「一个用于机器智能的开源软件库」,但我觉得应该这么界说:TensorFlow 是一个运用数据流图(data flow graphs)进行数值核算的开源软件库。在这儿,他们没有将 TensorFlow 包含在「深度学习结构」规模内,而是和 Theano 一同被包含在「图编译器(graph compilers)」类别中。

  在完毕了 Udacity 的 Deep Learning 课程(https://www.udacity.com/course/deep-learning–ud730)之后,我的感觉是 TensorFlow 是一个十分好的结构,可是却十分低层。运用 TensorFlow 需求编写许多的代码,你有必要一遍又一遍地从头创造轮子。并且我并不是仅有一个这么想的人。Andrej Karpathy 在 Twitter 上就屡次吐过槽:

  推文:我期望 TensorFlow 能标准化咱们的代码,但它是低层面的,所以咱们在其上面的层上各奔前程了:Slim、PrettyTensor、Keras、TFLearn …  

  比方:咱们在 OpenAI 运用 TensorFlow,但咱们好像都更喜爱其它结构,咱们有些人还写自界说代码。叹

  几个月前,我去参加了「Google Experts Summit: TensorFlow, Machine Learning for everyone, with Sergio Guadarrama」。Sergio 是开发 TensorFlow 的一位工程师,但他在会上没有展现 TensorFlow,而是展现了一个在 TensorFlow 上作业的更高层的库 tf.contrib:https://www.tensorflow.org/tutorials/tflearn/。我的观点是:他们内部现已意识到假如要让更多人运用 TensorFlow,他们就需求以更高的笼统水平在其上创立一些层,然后简化 TensorFlow 的运用。

  TensorFlow 支撑 Python 和 C++,也答应在 CPU 和 GPU 上的核算散布,乃至支撑运用 gRPC 进行水平扩展。

  总结:TensorFlow 十分好,但你有必要了解它好在哪里。假如你不想什么事都自己手动去做和从头创造轮子,你能够运用更简略的库(安利一下 Keras)。

  Theano

  链接:http://deeplearning.net/software/theano/

  Theano 是最老牌和最安稳的库之一。据我所知,深度学习库的初步不是 Caffe 便是 Theano。

  和 TensorFlow 相似,Theano 是一个比较低层的库。也因而它并不合适深度学习,而更合适数值核算优化。它支撑主动的函数梯度核算,带有 Python 接口并集成了 Numpy,这使得它从一初步就成为了通用深度学习范畴最常运用的库之一。

  今日,Theano 仍然作用杰出,但由于它不支撑多 GPU 和水平扩展,在 TensorFlow 的热潮下(它们针对同一个范畴),Theano 已然初步被遗忘了。

  Keras

  链接:https://keras.io/

  「You have just found Keras.」

  上面这句话是你打开文档页面时看到的榜首句话。我还记得我榜首次发现 Keras 的时分。那时分我正在柏林处理 Data Science Retreat 的最终一个项目,为此我尽力进入了深度学习库的国际。我在起步时就现已有了满足的深度学习常识,但我没有时刻自己手动编写功用,也没有时刻探究和学习一个新的库(截止时刻不到 2 个月,而我还有课要上)。然后我发现了 Keras。

  我真的很喜爱 Keras,由于它的句法是适当清楚的,它的文档也十分好(虽然相对较新),并且它支撑我现已把握的言语 Python。它的运用十分简略轻松;咱们也能很直观地了解它的指令、函数和每个模块之间的链接办法。

  Keras 是一个十分高层的库,能够作业在 Theano 和 TensorFlow(能够装备)之上。别的,Keras 着重极简主义——你只需几行代码就能构建一个神经网络。在这儿你能够比较一下 Keras 和 TensorFlow 完结相同功用时所需的代码:https://gist.github.com/ricgu8086/0ba44ce3aab19ec50425383a4d778b50

  Lasagne

  链接:http://lasagne.readthedocs.io/en/latest/index.html

  Lasagne 是一个作业在 Theano 之上的库。它的使命是简化一点深度学习算法之下的杂乱核算,一起也供给了一个愈加友爱的接口(也是 Python 的)。这是一个老牌的库,并且很长时刻以来它都是一个扩展才干很强的东西;但在我看来,它的发展速度赶不上 Keras。它们的适用范畴都差不多,但 Keras 有更好的文档、也更完好。

  Caffe

  链接:http://caffe.berkeleyvision.org/

  Caffe 不只是最老牌的结构之一,而是老牌中的老牌。

  在我看来,Caffe 有十分好的特性,但也有一些小缺陷。起先的时分它并不是一个通用结构,而只是重视核算机视觉,但它具有十分好的通用性。在咱们试验室的试验中,CaffeNet 架构的练习时刻在 Caffe 中比在 Keras 中(运用了 Theano 后端)少 5 倍。Caffe 的缺陷是它不行灵敏。假如你想给它来一点新改动,那你就需求运用 C++ 和 CUDA 编程,不过你也能够运用 Python 或 Matlab 接口进行一些小改动。

  Caffe 的文档十分匮乏。你需求花许多时刻检查代码才干了解它(Xavier 初始化有什么用?Glorot 是什么?)

  Caffe 的最大缺陷之一是它的装置。它需求处理许多的依靠包……我从前装置过 Caffe 两次,真实苦楚备至。

  但要清楚,Caffe 并不是一无可取。在投入了出产的核算机视觉体系的东西上,Caffe 是无可争议的领导者。它十分稳健十分快速。我的主张是:用 Keras 进行试验和测验,然后迁移到 Caffe 中进行出产。

  DSSTNE

  链接:https://github.com/amznlabs/amazon-dsstne

  DSSTNE 的发音同 Destiny,是一个酷劲十足的结构却总是被疏忽。为什么?除掉其他的要素不谈,原因在于这个结构不具有普适性,不是为一般常见使命所规划的。DSSTNE 结构只做一件事——引荐体系,但把这件事做到了极致。既不是为研讨而规划,也不是为测验 idea 而规划(来历其官方网站的宣传语),DSSTNE 结构是为量产而规划。

  咱们已在 BEEVA 上做一些试验测验了,现在我现已感觉到这是一个运转十分快的东西并且能够得到十分好的运转成果(均匀准确率均值——mAP 很高)。为了到达这一速度,DSSTNE 结构用 GPU 运转,这也是它的坏处之一:不同于篇中剖析的其他结构或许库,这个结构不支撑运用者随意在 CPU 和 GPU 中切换,而这或许会对有些测验有用,但咱们在 DSSTNE 里做这样的测验时是不被结构所答应的。

  其他的感触便是迄今停止 DSSTNE 还不是一个满足老练的项目,并且它封装的太紧密了(「black box」)。假如咱们想深化了解这个结构的运转机制是什么,咱们有必要且只能去看它的源码,并且你需求完结许多有必要完结的设置(「TODO」)才干够看到。一起,关于这个结构的在线教程不多,而能让开发者进行操作测验的辅导就更少了。我的定见是再等 4 个月看看 DSSTNE 的最新版别。不能不说 DSSTEN 的确是一个很有意思的项目但还需求一点生长空间。

  还想阐明一点,这个结构对编程才干没有要求。DSSTNE 结构经过其终端的指令行来履行相关操作。

  到现在停止,许多我知道也很盛行的结构和库我还没有用过,我不能给出更多详细的细节。

  Torch

  链接:http://torch.ch/

  在这个国际上每天仍有许多战役,可是一个优异的「勇士」(西班牙语「Guerrero」)有必要熟知哪些战役是需求去参加作战的,哪些是能够挑选不参加的。

  Torch 是一个很闻名的结构,因巨子 Facebook 的人工智能研讨所用的结构是 Torch,并且在被谷歌收买之前 DeepMind 也是用的 Torch(收买之后 DeepMind 转向了 TensorFlow)。Torch 的编程言语是 Lua,这便是我方才所谈的「战役」的详细所指。在现在深度学习编程言语绝大部分以 Python 完结为主的大趋势下,一个以 Lua 为编程言语的结构的最大下风莫过于此。我从未用运用过这个言语,假如我想运用 Torch 这个东西,毫无疑问我需求先学习 Lua 言语然后才干运用 Torch。这固然是一个合理的进程,但就我个人状况来说,我倾向于用 Python、Matlab 或许 C++的完结。

  MXNet

  链接:https://github.com/dmlc/mxnet

  mxnet 是一个支撑大多数编程言语的结构之一,包含 Python,R,C++,Julia 等。但我觉得运用 R 言语的开发者会特别偏心 mxnet,由于至今停止仍是 Python 以不行怀疑的态势称雄深度学习言语的(Python 与 R 的对决,猜猜我会站哪边?:-p)

  老实说,在此之前我并没有很重视 mxnet。可是当亚马逊 AWS 宣告挑选 mxnet 作为其深度学习 AMI 的库时触发我初步重视 mxnet。我有必要去了解一下。后来我获悉亚马逊把 mxnet 列为其深度学习的参阅库并声称其巨大的横向扩展才干。我感觉到这儿面有一些新的改动产生并且我有必要深化了解。这也是为什么咱们 2017 的 BEEVA 的技能测验名单里有 mnxet 的原因。

  我对多 GPU 的扩展才干有点疑虑并且我很本意去了解这样试验的更多细节,但现在我仍是对 mxnet 持怀疑态度。

  DL4J

  链接:https://deeplearning4j.org/

  我触摸这一库,是由于它的 documentation。其时我正在寻觅受限玻尔兹曼机、自编码器,在 DL4J 中找到了这两个 documentation。里边的文件很清楚,有理论,有代码事例。我有必要得说 DL4J 的 documentation 简直是艺术品,其他库在记载代码的时分需求向它学习。

  DL4J 背面的公司 Skymind 意识到,虽然在深度学习圈内 Python 是老迈,但大部分程序员起自 Java,所以需求找到一个处理方案。DL4J 兼容 JVM,也适用 Java、Clojure 和 Scala,跟着 Scala 的起起落落,它也被许多有潜力的创业公司运用,所以我还会持续紧追这个库。

  此外,Skymind 的 twitter 账户十分活泼,不断揭露最新的科学论文、事例和教程,及其引荐我们重视。

  Cognitive Toolkit

  链接:https://github.com/Microsoft/CNTK

  认知东西包(Cognitive Toolkit)之前被我们所知的缩略是 CNTK,可是最近又重命名回归到 Cognitive Toolkit,很或许是想沾最近微软认知服务(Microsoft Cognitive services)的光。在揭露的基准测验上的体现来看,这个东西好像很微弱,支撑纵向和横向的推移。

  现在停止,Cognitive Toolkit 好像不是很盛行。我并没有读到许多关于运用这个库的博客、在线试验事例或许在 Kaggle 里的相关谈论。可是对我来说,一个背靠微软研讨的结构特别着重自己的推移才干让我觉得有些古怪,究竟微软研讨团队可是在语音识别上打破国际纪录并迫临人类水准。

  我在检查他们项目百科的一个典范的时分了解到 Cognitive Toolkit 在 Python 上的语法和 Keras 是十分相相似的(Cognitive Toolkit 也支撑 C++),这不由让我在想(并不是承认)Keras 才是正确的办法。

  定论

  我的定论是:假如你想进入这一范畴,你应该首要学习 Python。虽然这一范畴还支撑其它许多言语,但 Python 是运用规模最广并且最简略的一个。可是为什么要挑选 Python 呢——究竟 Python 速度这么慢?由于大多数的库都运用的是符号式言语(symbolic language)办法而非指令式言语(imperative language)办法。解释一下也便是说:不是一条接一条地履行你的指令,而是依据你给出的一切指令创立一个核算图(computing graph)。这个图被内部优化和编译成可履行的 C++ 代码。这样你就能一起利用上两个国际的最优之处:Python 带来的开发速度和 C++ 带来的履行速度。

  人们对深度学习的爱好越来越大了,但人们并不乐意等候算法练习所需的许多核算时刻(并且我说的是 GPU,想都不要想只运用 CPU)。这也是多 GPU 支撑、多机器上的水平扩展乃至定制硬件最近初步取得权势的原因。

  深度学习范畴十分活泼、易变。很或许我现在所说的在 2017 年的中旬就变了。

  我的主张是,假如你是初学者,运用 Keras,假如不是初学者,也能够运用它。假如你参加过 Kaggle 竞赛,你必定留意到了 Kaggle 的两大巨星:Keras 和 XGBoost。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/184029.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部