tensorflow与主流深度学习框架对比

author author     2022-08-23     260

关键词:

引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩。AlphaGo背后神秘的推动力就是TensorFlow——Google于2015年11月开源的机器学习及深度学习框架。 
TensorFlow在2015年年底一出现就受到了极大的关注,在一个月内获得了GitHub上超过一万颗星的关注,目前在所有的机器学习、深度学习项目中排名第一,甚至在所有的Python项目中也排名第一。本文将带我们简单了解下TensorFlow,并与其他主流深度学习框架进行了对比。 
本文选自《TensorFlow实战》。

TensorFlow

  TensorFlow是相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写C++或CUDA代码。它和Theano一样都支持自动求导,用户不需要再通过反向传播求解梯度。其核心代码和Caffe一样是用C++编写的,使用C++简化了线上部署的复杂度,并让手机这种内存和CPU资源都紧张的设备可以运行复杂模型(Python则会比较消耗资源,并且执行效率不高)。除了核心代码的C++接口,TensorFlow还有官方的Python、Go和Java接口,是通过SWIG(Simplified Wrapper and Interface Generator)实现的,这样用户就可以在一个硬件配置较好的机器中用Python进行实验,并在资源比较紧张的嵌入式环境或需要低延迟的环境中用C++部署模型。SWIG支持给C/C++代码提供各种语言的接口,因此其他脚本语言的接口未来也可以通过SWIG方便地添加。不过使用Python时有一个影响效率的问题是,每一个mini-batch要从Python中feed到网络中,这个过程在mini-batch的数据量很小或者运算时间很短时,可能会带来影响比较大的延迟。现在TensorFlow还有非官方的Julia、Node.js、R的接口支持。 
  TensorFlow也有内置的TF.Learn和TF.Slim等上层组件可以帮助快速地设计新网络,并且兼容Scikit-learn estimator接口,可以方便地实现evaluate、grid search、cross validation等功能。同时TensorFlow不只局限于神经网络,其数据流式图支持非常自由的算法表达,当然也可以轻松实现深度学习以外的机器学习算法。事实上,只要可以将计算表示成计算图的形式,就可以使用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还支持深度强化学习乃至其他计算密集的科学计算(如偏微分方程求解等)。TensorFlow此前不支持symbolic loop,需要使用Python循环而无法进行图编译优化,但最近新加入的XLA已经开始支持JIT和AOT,另外它使用bucketing trick也可以比较高效地实现循环神经网络。TensorFlow的一个薄弱地方可能在于计算图必须构建为静态图,这让很多计算变得难以实现,尤其是序列预测中经常使用的beam search。 
  TensorFlow的用户能够将训练好的模型方便地部署到多种硬件、操作系统平台上,支持Intel和AMD的CPU,通过CUDA支持NVIDIA的GPU(最近也开始通过OpenCL支持AMD的GPU,但没有CUDA成熟),支持Linux和Mac,最近在0.12版本中也开始尝试支持Windows。在工业生产环境中,硬件设备有些是最新款的,有些是用了几年的老机型,来源可能比较复杂,TensorFlow的异构性让它能够全面地支持各种硬件和操作系统。同时,其在CPU上的矩阵运算库使用了Eigen而不是BLAS库,能够基于ARM架构编译和优化,因此在移动设备(Android和iOS)上表现得很好。 
  TensorFlow在最开始发布时只支持单机,而且只支持CUDA 6.5和cuDNN v2,并且没有官方和其他深度学习框架的对比结果。在2015年年底,许多其他框架做了各种性能对比评测,每次TensorFlow都会作为较差的对照组出现。那个时期的TensorFlow真的不快,性能上仅和普遍认为很慢的Theano比肩,在各个框架中可以算是垫底。但是凭借Google强大的开发实力,很快支持了新版的cuDNN(目前支持cuDNN v5.1),在单GPU上的性能追上了其他框架。下图为https://github.com/soumith/convnet-benchmarks给出的各个框架在AlexNet上单GPU的性能评测。 
技术分享
  目前在单GPU的条件下,绝大多数深度学习框架都依赖于cuDNN,因此只要硬件计算能力或者内存分配差异不大,最终训练速度不会相差太大。但是对于大规模深度学习来说,巨大的数据量使得单机很难在有限的时间完成训练。这时需要分布式计算使GPU集群乃至TPU集群并行计算,共同训练出一个模型,所以框架的分布式性能是至关重要的。TensorFlow在2016年4月开源了分布式版本,使用16块GPU可达单GPU的15倍提速,在50块GPU时可达到40倍提速,分布式的效率很高。目前原生支持的分布式深度学习框架不多,只有TensorFlow、CNTK、DeepLearning4J、MXNet等。不过目前TensorFlow的设计对不同设备间的通信优化得不是很好,其单机的reduction只能用CPU处理,分布式的通信使用基于socket的RPC,而不是速度更快的RDMA,所以其分布式性能可能还没有达到最优。 
  Google 在2016年2月开源了TensorFlow Serving19,这个组件可以将TensorFlow训练好的模型导出,并部署成可以对外提供预测服务的RESTful接口,如图2-2所示。有了这个组件,TensorFlow就可以实现应用机器学习的全流程:从训练模型、调试参数,到打包模型,最后部署服务,名副其实是一个从研究到生产整条流水线都齐备的框架。这里引用TensorFlow内部开发人员的描述:“TensorFlow Serving是一个为生产环境而设计的高性能的机器学习服务系统。它可以同时运行多个大规模深度学习模型,支持模型生命周期管理、算法实验,并可以高效地利用GPU资源,让TensorFlow训练好的模型更快捷方便地投入到实际生产环境”。除了TensorFlow以外的其他框架都缺少为生产环境部署的考虑,而Google作为广泛在实际产品中应用深度学习的巨头可能也意识到了这个机会,因此开发了这个部署服务的平台。TensorFlow Serving可以说是一副王牌,将会帮TensorFlow成为行业标准做出巨大贡献。 
技术分享
                      TensorFlow Serving架构

  TensorBoard是TensorFlow的一组Web应用,用来监控TensorFlow运行过程,或可视化Computation Graph。TensorBoard目前支持5种可视化:标量(scalars)、图片(images)、音频(audio)、直方图(histograms)和计算图(Computation Graph)。TensorBoard的Events Dashboard可以用来持续地监控运行时的关键指标,比如loss、学习速率(learning rate)或是验证集上的准确率(accuracy);Image Dashboard则可以展示训练过程中用户设定保存的图片,比如某个训练中间结果用Matplotlib等绘制(plot)出来的图片;Graph Explorer则可以完全展示一个TensorFlow的计算图,并且支持缩放拖曳和查看节点属性。TensorBoard的可视化效果如图2-3和图2-4所示。 
技术分享
                     TensorBoard的loss标量的可视化 
                      
技术分享
                     TensorBoard的模型结构可视化 
                     

主流深度学习框架对比

  TensorFlow拥有产品级的高质量代码,有Google强大的开发、维护能力的加持,整体架构设计也非常优秀。相比于同样基于Python的老牌对手Theano,TensorFlow更成熟、更完善,同时Theano的很多主要开发者都去了Google开发TensorFlow(例如书籍Deep Learning的作者Ian Goodfellow,他后来去了OpenAI)。Google作为巨头公司有比高校或者个人开发者多得多的资源投入到TensorFlow的研发,可以预见,TensorFlow未来的发展将会是飞速的,可能会把大学或者个人维护的深度学习框架远远甩在身后。 
  深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon,等等。然而TensorFlow却杀出重围,在关注度和用户数上都占据绝对优势,大有一统江湖之势。 
技术分享
  上图为各个开源框架在GitHub上的数据统计(数据统计于2017年1月3日),可以看到TensorFlow在star数量、fork数量、contributor数量这三个数据上都完胜其他对手。究其原因,主要是Google在业界的号召力确实强大,之前也有许多成功的开源项目,以及Google强大的人工智能研发水平,都让大家对Google的深度学习框架充满信心,以至于TensorFlow在2015年11月刚开源的第一个月就积累了10000+的star。其次,TensorFlow确实在很多方面拥有优异的表现,比如设计神经网络结构的代码的简洁度,分布式深度学习算法的执行效率,还有部署的便利性,都是其得以胜出的亮点。如果一直关注着TensorFlow的开发进度,就会发现基本上每星期TensorFlow都会有1万行以上的代码更新,多则数万行。产品本身优异的质量、快速的迭代更新、活跃的社区和积极的反馈,形成了良性循环,可以想见TensorFlow未来将继续在各种深度学习框架中独占鳌头。 
  观察可以发现,Google、Microsoft、Facebook等巨头都参与了这场深度学习框架大战,此外,还有毕业于伯克利大学的贾扬清主导开发的Caffe,蒙特利尔大学Lisa Lab团队开发的Theano,以及其他个人或商业组织贡献的框架。另外,可以看到各大主流框架基本都支持Python,目前Python在科学计算和数据挖掘领域可以说是独领风骚。虽然有来自R、Julia等语言的竞争压力,但是Python的各种库实在是太完善了,Web开发、数据可视化、数据预处理、数据库连接、爬虫等无所不能,有一个完美的生态环境。仅在数据挖据工具链上,Python就有NumPy、SciPy、Pandas、Scikit-learn、XGBoost等组件,做数据采集和预处理都非常方便,并且之后的模型训练阶段可以和TensorFlow等基于Python的深度学习框架完美衔接。 
  下面对主流的深度学习框架TensorFlow、Caffe、CNTK、Theano、Torch在各个维度进行了评分。 
技术分享
技术分享
  本文选自《TensorFlow实战》,点此链接可在博文视点官网查看此书。 
                      技术分享

  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                    技术分享

本文出自 “博文视点官方博客” 博客,请务必保留此出处http://bvbroadview.blog.51cto.com/3227029/1900842

主流深度学习框架对比(tensorflowkerasmxnetpytorch)

目录主流深度学习框架对比(TensorFlow、Keras、MXNet、PyTorch)一、简介二、流行度 查看详情

主流深度学习框架对比

...,各种开源深度学习框架也层出不穷,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon,等等。然而TensorFlow却杀出重围,在关注度和用户数上都占据绝对优势,大有一统江... 查看详情

tensorflow实战-tensorflow和其他深度学习框架的对比-第2章

2TensorFlow和其他深度学习框架的对比182.1主流深度学习框架对比182.2各深度学习框架简介20TensorFlowTensorFlow是相对高阶的机器学习库,用户?方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写C++或者CUDA代码。TensorFlo... 查看详情

主流的深度学习框架基本知识

本章内容1、TensorFlow2、Keras3、MXNet4、CNTK5、PyTorch 常见的深度学习框架常见的深度学习框架有TensorFlow、Caffe、Theano、Keras、PyTorch、MXNet等,如下图所示。这些深度学习框架被应用于计算机视觉、语音识别、自然语言处理与生物... 查看详情

pytorch与tensorflow怎么选

PyTorch和TensorFlow是目前最主流的两个深度学习框架,绝大多数研究者会选择PyTorch或者TensorFlow进行深度学习的入门学习。图1展示了近两年来几个主流深度学习框架的Google指数,其中PyTorch和TensorFlow的热度不相上下,均... 查看详情

对比深度学习十大框架:tensorflow并非最好?

...hina.net/news/80593/deep-learning-frameworks-a-review-before-finishing-2016TensorFlow链接:https://www.tensorflow.org/对于那些听说过深度学习但还没有太过专门深入的人来说,TensorFlow是他们最喜欢的深度学习框架,但在这里我要澄清一些事实。在TensorF 查看详情

深度学习框架介绍(代码片段)

深度学习框架介绍1.常见深度学习框架对比2.TensorFlow的特点3.TensorFlow的安装4.Tenssorlfow使用技巧1.常见深度学习框架对比tensorflow的github:2.TensorFlow的特点官网:https://www.tensorflow.org/语言多样(LanguageOptions)TensorFlo 查看详情

学习tf:《tensorflow技术解析与实战》pdf+代码

TensorFlow是谷歌公司开发的深度学习框架,也是目前深度学习的主流框架之一。《TensorFlow技术解析与实战》从深度学习的基础讲起,深入TensorFlow框架原理、模型构建、源代码分析和网络实现等各个方面。分为基础篇、实战篇和提... 查看详情

《tensorflow实战google深度学习框架》pdf一套四本+源代码_高清_完整

 TensorFlow实战热门Tensorflow实战书籍PDF高清版一套共四本+源代码,包含《Tensorflow实战》、《Tensorflow:实战Google深度学习框架(完整版)》、《TensorFlow:实战Google深度学习框架(第2版)》与《TensorFlow技术解析与实战》,不能错过的... 查看详情

深度学习框架tensorflow学习与应用

深度学习框架Tensorflow学习与应用网盘地址:https://pan.baidu.com/s/1eT3Nbe6密码:gva1备用地址(腾讯微云):https://share.weiyun.com/7decaa4b9f1a0c7ff2075de922f9c682密码:cd0871TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命... 查看详情

windows中主流深度学习框架安装细节

...版本号>当前安装cuda版本号>框架要求的cuda版本号。2.Tensorflow1.x目前,pytorch和tensorflow2.x向下兼容做得很好,易安装。Tensorflow1.x安装要求:N卡架构为图灵架构或以下。python3.7+cudatoolkit10.0+cudnn7.6.5,tensorflow1.14&#... 查看详情

学习《tensorflow实战google深度学习框架(第2版)》中文pdf和代码

TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用。《TensorFlow:实战Google深度学习框架(第2版)》为TensorFlow入门参考书,帮助快速、有效的方式上手TensorFlow和深度学习。书中省略了烦琐的数学模型推导,从实... 查看详情

炼数成金深度学习tensorflow框架的学习与应用视频教程

...基本原理的基础课程环境:Windows10+Anaconda收获预期:掌握Tensorflow和Tensorboard的基本使用,可熟练使用Tensorflow做图像识别及做验证码识别,深度理解和掌握Tensorflow在N 查看详情

[人工智能-综述-4]:主流深度学习框架比较排名

...比较1.1使用排名1.2综合比较 第2部分深度学习框架概述2.1Tensorflow2.2Keras2.3  查看详情

tensorflow源码解析1--内核架构和源码结构

...框架有数十种之多,主流的如下(截止到2018年11月)显然TensorFlow是独一无二的王者。第二名Keras,它是对TensorFlow或Theano接口的二次封装,严格意义上并不是一个独立的深度学习框架。TensorFlow目前也已经集成了Keras,使得安装了Te... 查看详情

五个常见ai开发库

...主流的框架进行介绍进行对比分析,以供大家参考使用:TensorFlow:推荐指数☆☆☆☆☆TensorFlow可谓大名鼎鼎,是Google大脑团队开发的深度学习框架,Google现有产品几乎都使用到了TensorFlow,比如Google的邮件、搜索、语音识别和相... 查看详情

8种主流深度学习框架介绍

...。这些框架各有所长,各具特色。常用的开源框架有TensorFlow、Keras、Caffe、PyTorch、Theano、CNTK、MXNet、PaddlePaddle、Deeplearning4j、ONNX等。作者:谢佳标来源:大数据DT(ID:hzdashuju)框架名称:TensorFlow主要... 查看详情

八大机器学习框架对比及tensorflow的优势

八大机器学习框架的对比:(1) TensorFlow:深度学习最流行的库之一,是谷歌在深刻总结了其前身DistBelief的经验教训上形成的;它不仅便携、高效、可扩展,还能再不同计算机上运行:小到智能手机,大到计算机集群都能;它是... 查看详情