在开始深度学习项目之前,选择一个合适的框架非常重要。近日,来自数据科学公司SiliconValleyDataScience的数据工程师MattRubashkin(加州大学伯克利分校博士)为我们带来了深度学习7大流行框架的深度横向对比。我希望这篇文章可以帮助你。在SVDS,我们的研发团队一直在研究不同的深度学习技术;从图像识别到语音,我们也在各种框架下实现了很多应用。在这个过程中,我们意识到我们需要一种简洁的方式来同时获取数据、创建模型并评估这些模型的性能。但当我们一次又一次开始新的深度学习项目时,却始终找不到一个参考标准来告诉自己如何开始。现在,为了回馈开源社区,帮助后来者,我们决定利用自己的经验,对目前流行的几种工具(Theano、TensorFlow、Torch、Caffe、MXNet、Neon、CNTK)进行横向比较。下图展示了各种深度学习工具的优缺点,希望对大家有所帮助。先说结论吧。这组对比参考了各种公开的基准评估,以及我们对这些技术在图像/语音识别应用中的主观印象。此外,您还需要注意:语言当您开始深度学习项目时,您必须使用支持您使用的语言的框架。比如Caffe(C++)和Torch(Lua)只能支持有限的几种语言(最近,随着PyTorch的出现,情况发生了变化)。所以如果你要选择以上两个框架,建议你提前熟悉C++或者Lua语言。相比之下,TensorFlow和MXNet具有丰富的多语言支持,即使您是C++新手也可以使用它们。教程和资源目前,各种深度学习框架可用的教程和资源的质量和数量差异很大。Theano、TensorFlow、Torch和MXNet都有非常详细的文档和教程,初学者很容易理解和实施。相比之下,虽然微软的CNTK和英特尔的NervanaNeon也是强大的工具,但我们在它们上看到的新手级别的资料却很少。另外,在研究过程中,我们发现GitHub社区的参与度不仅可以用来准确评估不同工具的开发水平,也是在搜索StackOverflow或Git时能否快速解决问题的参考指标回购的问题。当然,作为Google提供的框架,TensorFlow在教程、资源、开发人员和社区贡献者的数量上理所当然地处于领先地位。CNN建模能力卷积神经网络(CNN)通常用于图像识别、推荐引擎和自然语言识别等应用。CNN由一组多层神经网络组成,这些神经网络在运行时将输入数据分为预定义类别。CNN还可用于回归分析,例如对自动驾驶汽车的转向角进行建模。在Hengping中,我们评估了一个框架的CNN建模能力,考虑了几个属性:定义模型的机会空间、预构建层的可用性以及可用于连接这些层的工具和功能。我们发现Theano、Caffe和MXNet都具有很好的CNN建模能力。其中TensorFlow因为易于搭建的InceptionV3模型,Torch因为丰富的CNN资源,包括简单易用的时间卷积集,使得这两个框架在CNN建模能力上脱颖而出。RNN建模能力循环神经网络(RNN)通常用于语音识别、时间序列预测、图像字幕和其他需要处理顺序信息的任务。由于预建的RNN模型数量没有CNN多,如果你已经有RNN深度学习项目,最重要的是优先考虑旧RNN模型在哪个框架中实现。目前资源极少在Caffe上的RNN上,而微软的CNTK和Torch有丰富的RNN教程和预建模型。当然最新的TensorFlow中也有一些RNN的资源,在TFLearn和Keras中也有很多使用TensorFlow的RNN例子。架构对于在特定框架中构建和训练新模型,易于使用和模块化的前端至关重要。TensorFlow、Torch和MXNet都具有直观的模块化架构,使开发相对容易。相比之下,我们需要在像Caffe这样的框架上做很多工作来创建一个新层。此外,我们在开发过程中发现,由于TensorBoardwebGUI等应用的存在,TensorFlow在训练中和训练后都非常容易调试和监控。速度Torch和Nervana在开源卷积神经网络基准测试中表现最好Tensorflow的表现在大多数测试中都具有竞争力,而Caffe和Theano略微落后微软声称他们的CNTK在一些RNN训练任务中速度最快。在另一项比较Theano、Torch和TensorFlow的RNN性能的研究中,Theano是其中最快的。大多数深度学习应用程序需要大量的浮点运算(FLOP)。比如百度的DeepSpeech识别模型,训练需要10sExaFLOPs,超过10e18次计算。考虑到当前最先进的显卡,例如NvidiaPascal架构的TitanX,每秒可以执行11e9FLOPs。因此,如果您需要在大型数据集上训练新模型-在单个GPU机器上-可能需要长达一周的时间。为了减少构建模型所需的时间,我们需要并行使用多个GPU来构建我们自己的机器。幸运的是,上述大多数架构都很好地支持多GPU计算。其中,MXNet据称拥有最先进的多GPU优化引擎。Keras兼容性Keras是一个用于快速深度学习原型制作的高级库。我们在实践中发现,它是数据科学家应用深度学习的好帮手。Keras目前支持两种后端框架:TensorFlow和Theano,Keras很快将成为TensorFlow的默认API。尽管如此,Keras的作者表示,这个高级库在未来仍将作为前端存在,以支持多种框架。总结如果你想开始深度学习,你应该从评估你的团队的技能和业务需求开始。例如,如果一个以Python为中心的团队想要开发一个图像识别应用程序,你应该使用TensorFlow,因为它具有丰富的资源、良好的性能和完整的原型工具。如果支持Lua的团队想要将RNN应用到大规模生产环境中,他们将受益于Torch高速且强大的RNN建模能力。未来,我们将继续讨论这些框架在更大规模应用程序中的性能。这些挑战包括多机并联时的多GPU优化,各种开源库的兼容性,如CMUSphinx和Kaldi等,敬请期待。
