陈奇网络工作室

TensorFlow与关键深度学习框架比较

建设工作站服务器

引言: alpha go在2017年初成为主场,通过游戏城、野狐等平台席卷中日韩围棋高手,取得60连胜,从未输过。 Alpha GO背后的神秘推动力是TensorFlow——Google于2015年11月开放源代码化的机器学习和深度学习框架。

TensorFlow在2015年底问世后引起了巨大的关注,一个月内在GitHub上引起了超过1万颗星星的关注,目前在所有机器学习、深度学习项目中排名第一,在所有Python项目中也排名第一本文简要介绍了TensorFlow,并将其与其他主要的深度学习框架进行比较。

本文选自《TensorFlow实战》。

TensorFlow

TensorFlow是比较高级的机器学习库,用户为了追求有效的安装,不需要自己编写c和CUDA代码,可以简单地设计神经网络结构。 和Theano一样支持自动引导,用户不需要通过反向传播解开梯度。 其核心代码与Caffe一样用c编写,通过使用c可以降低在线部署的复杂性,使其能够在手机等内存和CPU资源不足的设备上运行复杂的模型( Python消耗资源,运行效率高) 除了核心代码的C接口外,TensorFlow还有官方的Python、Go、Java接口,通过swig ( simplifiedwrapperandinterfacegenerator )进行实验。 现在可以在硬件配置良好的机器上使用Python。由于SWIG支持为C/C代码提供各种语言的接口,所以将来也可以很容易地在SWIG中添加其他脚本语言的接口。 但是,在使用Python时影响效率的一个问题是,每个mini-batch都从Python馈送到网络,这个过程在mini-batch的数据量少或运算时间短的情况下会带来很大的延迟目前,TensorFlow还提供了非正式的Julia、Node.js和r接口支持。

TensorFlow还内置了TF.Learn和TF.Slim等上层组件,有助于快速设计。西部数码代理商联系人与evaluate、网格搜索和CrossValloss界面的兼容性使您可以轻松实现evaluate、网格搜索和CrossValloss 数据流图支持非常自由的算法表示,除深度学习以外的机器学习算法当然也能轻松实现。 实际上,如果可以用计算图的形式表示计算的话,就可以使用TensorFlow。 用户可以编写内层循环代码来控制计算图分支的计算,TensorFlow会自动将相关分支转换为子图并执行迭代运算。 TensorFlow还可以将计算图的每个节点分配给不同的设备并运行,以充分利用硬件资源。 要定义新节点,只需编写一个Python函数。 如果没有相应的基本运算核心,则必须编写c或CUDA代码来实现运算操作。

在数据并行模式下,TensorFlow和Parameter Server非常相似,但是TensorFlow具有独立的Variable node,并且没有像其他框架那样全局统一的参数服务器,因此参数TensorFlow和Spark的核心都是数据计算的流程图。 Spark面向大规模数据,支持SQL等操作。 另一方面,TensorFlow主要以内存足以加载模型参数的环境为对象,由此可以最大化计算效率。

TensorFlow的另一个重要特性是灵活的可移植性,可以轻松部署到具有任意数量CPU或GPU的PC、服务器或移动设备上,而几乎不需要更改相同的代码。 与Theano相比,TensorFlow还具有非常快的编译速度的优点。 在定义西部数码代理商联系结构时,Theano通常需要长时间的编译,因此尝试新模型需要相对较大的成本,但TensorFlow完全没有这个问题。 TensorFlow还有一个功能强大的可视化组件TensorBoard,用于可视化网络结构和培训过程,有助于观察复杂的网络结构并进行长时间、大规模的培训监控。 TensorFlow对生产环境进行了高度优化,其产品级的高质量代码和设计保证了其在生产环境中的稳定运行,同时TensorFlow在工业界的广泛应用将会产生良性循环,成为深度学习领域的事实标准。

一般网络结构[卷积神经网络( Convolutional Neural Network,CNN ) ]、循环神经网络( Recurent Neural Network, RNN ) ],此外,TensorFlow至今不支持深度强化学习或其他计算密集型科学计算(例如偏微分方程的求解等),并且使用Python循环此外,使用bucketing trick还可以比较有效地实现循环神经网络。 TensorFlow的弱点之一可能是需要将计算地图构建为静态地图。 这使许多计算变得困难,尤其是在序列预测中常用的beam search中。

TensorFlow用户可以方便地将经过训练的模型部署到多种硬件、操作系统平台上,支持Intel和AMD CPU,通过CUDA支持NVIDIA GPU,最近通过OpenCL支持amd )、在支持Linux和Mac,最近版本0.12也支持的工业生产环境中,硬件设备既有最新的,也有使用了几年的旧机型,来源可能很复杂。 TensorFlow的异构性使其能够全面支持各种硬件和操作系统。 而CPU上的矩阵计算库使用的是Eigen而不是BLAS库,可以基于ARM架构进行编译和优化,因此在移动设备( Android和iOS )上具有优势。

TensorFlow在第一个版本中仅支持独立,并且仅支持CUDA 6.5和cuDNN v2。 另外,没有官方和其他深度学习框架的比较结果。 2015年底,在许多其他框架中进行了各种性能比较评估,TensorFlow每次都作为不良对照组出现。 那个时期的TensorFlow真的让人不快,只是和性能上一般说很慢的Theano比肩,可以说是在各自的框架中垫底。 但是,由于谷歌强大的开发能力,很快就支持了新的cuDNN (现在为cuDNN v5.1 ),单GPU的性能赶上了其他框架。 下图显示了由https://github.com/sou mith/convnet-benchmarks提供的每个框架在AlexNet上对单个GPU的性能评估。

目前,在单GPU条件下,大多数深度学习框架都依赖cuDNN,因此只要硬件的计算能力或内存分配差异很大,最终的训练速度就不会有很大的不同。 但是,对于大型深度学习,由于巨大的数据量,单体很难在有限的时间内完成训练。 在这种情况下,需要并行计算GPU集群乃至TPU集群,共同训练模型,因此框架的分散性能很重要。 TensorFlow于2016年4月开放源代码化了分散版本,使用16台GPU可以实现1GPU的15倍,50台GPU可以实现40倍的高速化,分散的效率高。 目前,本机支持的分布式深度学习框架很少,只有TensorFlow、CNTK、DeepLearning4J、MXNet等。 但是,现在TensorFlow的设计没有针对不同设备间的通信进行优化,独立的reduction只能由CPU处理,由于分散型的通信使用的是基于套接字的RPC而不是更高速的RDMA,因此分散型的性能

谷歌于2016年2月开放了TensorFlow Serving19。 该组件可以作为rest风格的界面部署,可以导出在TensorFlow中训练过的模型,并向外部提供预测服务,如图2-2所示。 有了这个组件,TensorFlow就可以实现应用机器学习的全过程。 从训练模型、调试参数、封装模型,到最后部署服务,是一个名副其实的从研究到生产的整条流水线。 这里引用TensorFlow内部开发者的说明。 “TensorFlow Serving是一个专为生产环境设计的高性能机器学习服务系统。 可以同时运行多个大型深度学习模型,支持模型的生命周期管理、算法实验,有效利用GPU资源,更快、更方便地将通过TensorFlow训练的模型投入生产。” 虽然缺乏将非TensorFlow框架部署到生产环境中的想法,但谷歌可能也意识到了将深度学习广泛应用于实际产品的大公司的这一机会,并开发了该部署服务平台。 TensorFlow Serving可以说是TensorFlow为成为行业标准做出巨大贡献的王牌。

tensor流程服务体系结构

TensorBoard是TensorFlow的一系列web APP应用程序,用于监控TensorFlow的运行过程并可视化计算图形。 TensorBoard目前支持五种类型的可视化:标量、图像、音频、直方图和计算图表。 TensorBoard的Events Dashboard可用于持续监视运行时的关键指标,如loss、学习速度( learning rate )和验证集中的准确性( accuracy )。 在Image Dashboard中,可以看到在训练中用户设置并保存的图像,例如将某个训练的中间结果用Matplotlib等绘图( plot )的图像。 Graph Explorer提供了完整的TensorFlow计算视图,并支持缩放和拖动节点属性以进行显示。 TensorBoard的可视化效果如图2-3和图2-4所示。

TensorBoard的loss标量可视化

TensorBoard的模型结构可视化

主要深度学习框架的比较

TensorFlow拥有产品级二维码,有谷歌强大的开发、维护能力的支撑,整体架构设计也非常出色。 与同样基于Python的老字号竞争对手Theano相比,TensorFlow更成熟、更精致。 另外,Theano的很多主要开发者都去谷歌开发TensorFlow了。 (例如,书籍Deep Learning的作者Ian Goodfellow后来去了OpenAI。 Google作为一家大公司,在TensorFlow的研发上投入的资源远远超过了大学和个人开发人员,预计TensorFlow未来的发展将会很快,有可能远远落后于大学和个人维护的深度学习框架

深度学习研究热潮持续,TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon等

上图是每个开源框架的GitHub中的数据统计。 数据统计是2017年1月3日。 可以看出,TensorFlow在star数、fork数、contributor数三个数据上完胜了其他对手。 原因主要是谷歌在行业的号召力确实很强,以前也有很多成功的开源项目,以及谷歌强大的人工智能研发水平,使得TensorFlow在2015年11月开源的第一个月就积累了10000个star 其次,TensorFlow确实在很多方面都有很好的表现,设计神经网络结构的代码简洁、分布式深度学习算法的运行效率、导入的便利性等都是其优势。 如果你关注TensorFlow的开发进度,你会发现基本上每周TensorFlow都会有一万多行代码更新,最多几万行。 产品本身的优秀品质、快速的反复更新、活跃的社区和积极的反馈,形成了良性循环,预计TensorFlow未来将继续在各种深度学习框架中独占鳌头。

据观察,除谷歌、微软、Facebook等大型企业参与了这场深度学习框架大战外,还由伯克利大学毕业的贾扬清主导开发的Caffe、蒙特利尔大学Lisa Lab团队开发您还可以看到,每个主要框架基本上都支持Python。 现在,Python在科学计算和数据挖掘领域可以说是别出心裁。 虽然存在来自r、Julia等语言的竞争压力,但Python的各种库过于完备,Web开发、数据可视化、数据预处理、数据库连接、爬虫等都无能为力,有完美的生态环境。 只有数据挖掘工具链,Python具有NumPy、SciPy、Pandas、Scikit-learn、XGBoost等组件,非常方便进行数据采集和预处理,便于后续的模型训练

在各个维度上对主要的深度学习框架TensorFlow、Caffe、CNTK、Theano、Torch进行了评价。

这篇文章选自《TensorFlow实战》。 点击此链接,可以在博文视点的官方网站上看到这本书。

要及时获取更多精彩文章,请在微信上搜索“博文视点”或扫描下方二维码关注。

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3