选自Medium
机器之心编译
参与:吴攀、朱思颖、李亚洲
TensorFlow
对于那些听说过深度学习但还没有太过专门深入的人来说,TensorFlow是他们最喜欢的深度学习框架,但在这里我要澄清一些事实。
在TensorFlow的官网上,它被定义为「一个用于机器智能的开源软件库」,但我觉得应该这么定义:TensorFlow是一个使用数据流图(dataflowgraphs)进行数值计算的开源软件库。在这里,他们没有将TensorFlow包含在「深度学习框架」范围内,而是和Theano一起被包含在「图编译器(graphcompilers)」类别中。
在结束了Udacity的DeepLearning课程()之后,我的感觉是TensorFlow是一个非常好的框架,但是却非常低层。使用TensorFlow需要编写大量的代码,你必须一遍又一遍地重新发明轮子。而且我并不是唯一一个这么想的人。AndrejKarpathy在Twitter上就多次吐过槽:
推文:我希望TensorFlow能标准化我们的代码,但它是低层面的,所以我们在其上面的层上分道扬镳了:Slim、PrettyTensor、Keras、TFLearn
比如:我们在OpenAI使用TensorFlow,但我们似乎都更喜欢其它框架,我们有些人还写自定义代码。叹
几个月前,我去参加了「GoogleExpertsSummit:TensorFlow,MachineLearningforeveryone,withSergioGuadarrama」。Sergio是开发TensorFlow的一位工程师,但他在会上没有展示TensorFlow,而是展示了一个在TensorFlow上工作的更高层的库:。我的看法是:他们内部已经意识到如果要让更多人使用TensorFlow,他们就需要以更高的抽象水平在其上创建一些层,从而简化TensorFlow的使用。
TensorFlow支持Python和C++,也允许在CPU和GPU上的计算分布,甚至支持使用gRPC进行水平扩展。
总结:TensorFlow非常好,但你必须了解它好在哪里。如果你不想什么事都自己手动去做和重新发明轮子,你可以使用更简单的库(安利一下Keras)。
Theano
Theano是最老牌和最稳定的库之一。据我所知,深度学习库的开端不是Caffe就是Theano。
和TensorFlow类似,Theano是一个比较低层的库。也因此它并不适合深度学习,而更适合数值计算优化。它支持自动的函数梯度计算,带有Python接口并集成了Numpy,这使得它从一开始就成为了通用深度学习领域最常使用的库之一。
今天,Theano依然效果良好,但由于它不支持多GPU和水平扩展,在TensorFlow的热潮下(它们针对同一个领域),Theano已然开始被遗忘了。
Keras
「YouhavejustfoundKeras.」
上面这句话是你打开文档页面时看到的第一句话。我还记得我第一次发现Keras的时候。那时候我正在柏林解决DataScienceRetreat的最后一个项目,为此我努力进入了深度学习库的世界。我在起步时就已经有了足够的深度学习知识,但我没有时间自己手动编写功能,也没有时间探索和学习一个新的库(截止时间不到2个月,而我还有课要上)。然后我发现了Keras。
我真的很喜欢Keras,因为它的句法是相当明晰的,它的文档也非常好(尽管相对较新),而且它支持我已经掌握的语言Python。它的使用非常简单轻松;我们也能很直观地了解它的指令、函数和每个模块之间的链接方式。
Keras是一个非常高层的库,可以工作在Theano和TensorFlow(可以配置)之上。另外,Keras强调极简主义——你只需几行代码就能构建一个神经网络。在这里你可以比较一下Keras和TensorFlow实现相同功能时所需的代码:
Lasagne
Lasagne是一个工作在Theano之上的库。它的使命是简化一点深度学习算法之下的复杂计算,同时也提供了一个更加友好的接口(也是Python的)。这是一个老牌的库,并且很长时间以来它都是一个扩展能力很强的工具;但在我看来,它的发展速度赶不上Keras。它们的适用领域都差不多,但Keras有更好的文档、也更完整。
Caffe
Caffe不只是最老牌的框架之一,而是老牌中的老牌。
Caffe的文档非常贫乏。你需要花大量时间检查代码才能理解它(Xavier初始化有什么用?Glorot是什么?)
Caffe的最大缺点之一是它的安装。它需要解决大量的依赖包……我曾经安装过Caffe两次,真正痛苦至极。
但要清楚,Caffe并不是一无是处。在投入了生产的计算机视觉系统的工具上,Caffe是无可争议的领导者。它非常稳健非常快速。我的建议是:用Keras进行实验和测试,然后迁移到Caffe中进行生产。
DSSTNE
我们已在BEEVA上做一些实验测试了,目前我已经感觉到这是一个运行非常快的工具并且能够得到非常好的运行结果(平均准确率均值——mAP很高)。为了达到这一速度,DSSTNE框架用GPU运行,这也是它的弊端之一:不同于篇中分析的其他框架或者库,这个框架不支持使用者随意在CPU和GPU中切换,而这可能会对有些尝试有用,但我们在DSSTNE里做这样的尝试时是不被框架所允许的。
其他的感受就是迄今为止DSSTNE还不是一个足够成熟的项目,而且它封装的太严密了(「blackbox」)。如果我们想深入了解这个框架的运行机制是什么,我们必须且只能去看它的源码,并且你需要完成很多必须完成的设置(「TODO」)才可以看到。同时,关于这个框架的在线教程不多,而能让开发者进行操作尝试的指导就更少了。我的意见是再等4个月看看DSSTNE的最新版本。不能不说DSSTEN的确是一个很有意思的项目但还需要一点成长空间。
还想说明一点,这个框架对编程能力没有要求。DSSTNE框架通过其终端的命令行来执行相关操作。
到目前为止,很多我知道也很流行的框架和库我还没有用过,我不能给出更多具体的细节。
Torch
在这个世界上每天仍有很多战争,但是一个优秀的「勇士」(西班牙语「Guerrero」)必须熟知哪些战争是需要去参加作战的,哪些是可以选择不参与的。
Torch是一个很著名的框架,因巨头Facebook的人工智能研究所用的框架是Torch,并且在被谷歌收购之前DeepMind也是用的Torch(收购之后DeepMind转向了TensorFlow)。Torch的编程语言是Lua,这就是我刚才所谈的「战争」的具体所指。在目前深度学习编程语言绝大部分以Python实现为主的大趋势下,一个以Lua为编程语言的框架的最大劣势莫过于此。我从未用使用过这个语言,如果我想使用Torch这个工具,毫无疑问我需要先学习Lua语言然后才能使用Torch。这固然是一个合理的过程,但就我个人情况来说,我偏向于用Python、Matlab或者C++的实现。
MXNet
mxnet是一个支持大多数编程语言的框架之一,包括Python,R,C++,Julia等。但我觉得使用R语言的开发者会特别偏爱mxnet,因为至今为止还是Python以不可置疑的态势称霸深度学习语言的(Python与R的对决,猜猜我会站哪边?:-p)
我对多GPU的扩展能力有点疑虑并且我很原意去了解这样实验的更多细节,但目前我还是对mxnet持怀疑态度。
DL4J
我接触这一库,是因为它的documentation。当时我正在寻找受限玻尔兹曼机、自编码器,在DL4J中找到了这两个documentation。里面的文件很清楚,有理论,有代码案例。我必须得说DL4J的documentation简直是艺术品,其他库在记录代码的时候需要向它学习。
DL4J背后的公司Skymind意识到,虽然在深度学习圈内Python是老大,但大部分程序员起自Java,所以需要找到一个解决方案。DL4J兼容JVM,也适用Java、Clojure和Scala,随着Scala的起起落落,它也被很多有潜力的创业公司使用,所以我还会继续紧追这个库。
CognitiveToolkit
认知工具包(CognitiveToolkit)之前被大家所知的缩略是CNTK,但是最近又重命名回归到CognitiveToolkit,很可能是想沾最近微软认知服务(MicrosoftCognitiveservices)的光。在公开的基准测试上的表现来看,这个工具似乎很强劲,支持纵向和横向的推移。
我在查看他们项目百科的一个范例的时候了解到CognitiveToolkit在Python上的语法和Keras是非常相类似的(CognitiveToolkit也支持C++),这不禁让我在想(并不是确认)Keras才是正确的方式。
结论
我的结论是:如果你想进入这一领域,你应该首先学习Python。尽管这一领域还支持其它很多语言,但Python是应用范围最广而且最简单的一个。但是为什么要选择Python呢——毕竟Python速度这么慢?因为大多数的库都使用的是符号式语言(symboliclanguage)方法而非命令式语言(imperativelanguage)方法。解释一下也就是说:不是一条接一条地执行你的指令,而是根据你给出的所有指令创建一个计算图(computinggraph)。这个图被内部优化和编译成可执行的C++代码。这样你就能同时利用上两个世界的最优之处:Python带来的开发速度和C++带来的执行速度。
人们对深度学习的兴趣越来越大了,但人们并不愿意等待算法训练所需的大量计算时间(而且我说的是GPU,想都不要想只使用CPU)。这也是多GPU支持、多机器上的水平扩展甚至定制硬件最近开始得势的原因。
深度学习领域非常活跃、易变。很可能我现在所说的在2017年的中旬就变了。
我的建议是,如果你是初学者,使用Keras,如果不是初学者,也可以使用它。如果你参加过Kaggle比赛,你肯定注意到了Kaggle的两大巨星:Keras和XGBoost。
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。