深度 | 对比深度学习十大框架:TensorFlow最流行但并不是最好

2023-06-02 0 220

LizierMedium

电脑之心校对

参予:吴攀、朱思颖、李亚洲地区

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 一同被包涵在「图C++(graph compilers)」类型中。

在完结了 Udacity 的 Deep Learning 专业课程(https://www.udacity.com/course/deep-learning–ud730)之后,我的真的是 TensorFlow 是两个十分好的架构,但是却十分上层。采用 TensorFlow 须要撰写大批的标识符,你要两遍又两遍地再次发明者车轮。所以我并并非惟一两个那么想的人。Andrej Karpathy 在 Twitter 上就数次吐过槽:

深度 | 对比深度学习十大框架:TensorFlow最流行但并不是最好

推文:我期望 TensorFlow 能标准化他们的标识符,但它是上层面的,所以他们在其上面的层上分道扬镳了:Slim、PrettyTensor、Keras、TFLearn …

深度 | 对比深度学习十大框架:TensorFlow最流行但并不是最好

比如:他们在 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 中比在 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 架构只做一件事——推荐系统,但把

他们已在 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)

要深入细致了解。这也是为何他们 2017 的 BEEVA 的技术测试名单里有 mnxet 的原因。

我对多 GPU 的扩展能力有点疑虑并且我很原意去了解这样实验的更多细节,但目前我还是对 mxnet 持怀疑态度。

DL4J

镜像:https://deeplearning4j.org/

我接触而此库,是因为它的 documentation。当时我正在寻找受限玻尔兹曼机、自编码器,在 DL4J 中找到了这两个 documentation。里面的文件很清楚,有理论,有标识符案例。我要得说 DL4J 的 documentation 简直是艺术品,其他库在记录标识符的时候须要向它自学。

DL4J 背后的公司 Skymind 意识到,虽然在广度自学圈内 Python 是老大,但大部分程序员起自 Java,所以须要找到两个解决方案。DL4J 兼容 JVM,也适用 Java、Clojure 和 Scala,随着 Scala 的起起落落,它也被很多有潜力的创业公司采用,所以我还会继续紧追这个库。

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。

原文镜像:https://medium.com/@ricardo.guerrero/deep-learning-frameworks-a-review-before-finishing-2016-5b3ab4010b06#.z8zuthuwm

©本文由电脑之心校对,。

✄————————————————

加入电脑之心(全职记者/实习生):[email protected]

投稿或寻求报道:[email protected]

广告&商务合作:[email protected]

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务