TensorFlow深度学习框架的优缺点

95272021-11-26 14:41

  现在许多开发者和学生开始关注深度学习,很多是因为谷歌开源的深度学习框架TensorFlow。自谷歌六个月前开源TensorFlow以来,网上有许多关于TensorFlow的学习文章,但是缺乏帮助文档,我在学习过程中尽可能到处搜索应用示例、教程、文档和代码片段。

  从TensorFlow的优缺点两方面记录下一些学习体会,首先是五方面的优点:

  第一、社区活跃度是最重要的事情

  我对TensorFlow最满意的一点是社区的大多数人都是开放心态,并且满怀希望。我们都希望做出一些有意义的事情,站在更多人的肩膀上去解决问题。

  谷歌Deepmind团队近期宣布从Torch迁移到TensorFlow,因此我们都预期谷歌也会开源TensorFlowRL(强化学习)模型。当社区的每个人具有开放性、愿意贡献API、有用的模块以及乐于助人,这个社区的未来一定是光明的。

  第二、技术障碍基本扫清

  去年11月份,我们写第一篇关于TensorFlow的文章时,还存在一些真正的和潜在的技术问题。但是今天这些基本上都已经被扫清,比如:

  1、支持多GPU:已经做到了,文档清晰简洁。

  2、分布式训练:v0.8已经支持分布式训练。

  3、支持操作队列:数据加载或图像预处理。

  4、TensorBoard支持图形可视化:学习和调试新模型时,容易陷入迷惑,因此TensorBoard图形可视化非常有用。

  5、使用TensorBoard以交互方式记录日志。在UNIX/Linux,我喜欢使用-f跟踪任务输出以及快速检查。通过TensorBoard做日志记录也能这样做,比如学习速率、损失值、测试精度等。

  6、模型检查点设置:一个模型训练一段时间后,需要停下来进行评估,然后从检查点重新加载,继续训练。

  7、使用CUDNN优化GPU性能:与Theano等框架类似使用了CUDNN进行GPU性能优化。TensorFlowv0.8目前使用CUDNNv4.性能有所提高。

  第三、有几个高质量的元框架(metaframework)

  1、Keras封装TensorFlow和Theano后端。如果你不想了解TensorFlow(Theano)的细节,只需要模块化,那么Keras是个不错的选择。

  2、TensorFlowSlim是对图像模型来说不错的参考(reference)。Slim对开发者使用TensorflowAPI和模型设计都有极大的参考价值。

  3、ScikitFlow是TensorFlow的简化接口,参考Scikit-learn风格的API。

  4、PrettyTensor提供类似张量(tensors)的对象,并有可链接的语法,可以构建某种类型的模型。

  第四、完善的版本进度管理

  维护一个开源项目,尤其是TensorFlow这种技术复杂的项目挑战非常大。我很赞赏TensorFlow团队的运营人员,有兴趣的开发者可以去看一下他们的版本管理细节。

  第五、测试出色

  测试对功能验证来说非常重要,当你发现TensorFlow训练情况与你预期的不一样时,你可以在Github搜索做下测试,观察一下测试结果。

  在学习使用TensorFlow过程,该框架还存在一些缺点:

  第一、相比Theano框架,在RDD实现方面还存在不足

  RDD:recurrentneuralnetworks循环神经网络,属于recursiveneuralnetwork递归神经网络的一种变体)。recurrent:时间维度的展开,代表信息在时间维度从前往后的的传递和积累,后面的信息的概率建立在前面信息的基础上,在神经网络结构上表现为后面的神经网络的隐藏层的输入是前面的神经网络的隐藏层的输出;而recursive:空间维度的展开,是一个树结构。

  Theano团队在优化他们的循环神经网络实现付出了很多的精力,在这方面TensorFlow还有较大的差距,但是近几个月这种差距在缩小。

  对于循环神经网络,在单GPU的情形下,Theano可能比TensorFlow快一些,而且占用GPU内存小一点。但是在多GPU方面TensorFlow略占优势。

  第二、数据训练目前还缺乏令人信服的示例

  TensorFlow文档和案例主要使用一些著名的学术数据集来阐述各种特性或功能。这是有一定道理的,但是,现实中的问题几乎不能简单替换这些数据集。

  开发者在学习TensorFlow时最困难的是,如何将现实中杂乱的数据抽象为模型能识别的各种张量(tensor),因此如果有一些令人信服的案例,具体展示如何完成抽象过程,会对开发者来说非常有帮助。遗憾的是,谷歌并没有提供更多的这方面的示例。尽管谷歌DeepMind团队发表了AlphaGo的论文,但是并没有公布如何将“棋局”抽象为模型输入张量的具体过程。

  第三、文档尚不完善

  尽管TensorFlow公布了一些教程,其代码注释的质量很高,但是由于深度学习领域范围广,发展很快,在新功能与教程之间还有很大的不足。以下是我个人收藏的一些教程,分享给大家:

  1、Github上Nathan主页,介绍了一些机器学习的基本原理;

  2、Udacity在线课程,GoogleBrain项目负责人VincentVanhoucke在学习网站Udacity发起一项免费的深度机器学习技术的课程培训,通过项目和任务完整学习TensorFlow系统。

  3、官方MNIST教程,学习完Udacity在线课程之后的进阶教程。

  4、TensorflowAPI文档。目前针对TensorFlow最全的官方资料大全。

  对于初学者来说,Udacity教程非常有用,但是对于那些有些经验的开发者来说,还是太简单了点。因为Udacity在线课程不能教会你如何建立自己的模型,如何抽象张量。当然这个过程不能着急,必须循序渐进,就好比学习滑雪一样。

  完全理解TensorFlow团队的第一要务是学习框架的功能,其次才是文档,因为换做我们也会这样做。见过的最好文档反而不是出自这些官方文档作者之手,因为好的文档要保证至少有一个外人能理解。

  第四、TensorFlow独占GPU

  在初始化时,TensorFlow尝试去分配所有可用的GPU内存给自己。这是一把双刃剑,取决于你的情景。如果你开发一个模型,使用的是本地计算机上的GPU,你可能会想分配一部分GPU到其他的事上。如果你在云计算环境下运行模型,那么你需要了解没有其他相互影响的代码。

  我自己是使用以下代码给一个进程设定GPU占用上线。

  gpuoptions=tf.GPUOptions(perprocessgpumemory_fraction=0.5)

  sess=tf.Session(config=tf.ConfigProto(gpuoptions=gpuoptions))

  第五、默认情况下,Theano与TensorFlow会相互冲突

  如果你在相同资源下运行Theano和TensorFlow,它们将会争夺GPU内存。为了在不同的GPU上运行完全不同的环境(比如两个GPU运行两种模式),你可以限制CUDA只能看到某种特定的设备。CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。

  点击图片免费领取课程!

TensorFlow深度学习框架的优缺点

  以上就是小编为大家整理发布的“TensorFlow深度学习框架的优缺点”一文,更多相关内容尽在开课吧广场数据分析教程频道。

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
Hello,World公开课