【玩转TensorFlow】TensorFlow常见问题详解
引言:自TensorFlow于2015年底正式开源,距今已有一年多,不久前,TensorFlow正式版也发布了。这期间TensorFlow不断给人以惊喜,推出了分布式版本,服务框架TensorFlowServing,可视化工具TensorFlow,上层封装TF.Learn,其他语言(Go、Java、Rust、Haskell)的绑定、Windows的支持、JIT编译器XLA、动态计算图框架Fold,以及数不胜数的经典模型在TensorFlow上的实现(InceptionNet、SyntaxNet等)。在这一年多时间,TensorFlow已从初入深度学习框架大战的新星,成为了几近垄断的行业事实标准。
目前看来,对于人工智能这个领域依然有不少怀疑的声音,但不可否认的是,人工智能仍然是未来的发展趋势。
本文整理了黄文坚和唐源两位老师在开源中国高手问答中一些与TensorFlow相关的精彩问答,主要分为以下几类。
- TensorFlow之入门篇
- TensorFlow之性能篇
- TensorFlow之适用场景
- TensorFlow之实战篇
- 其他相关的问题
一、TensorFlow之入门篇
1.没接触过,刚了解了一下,这个东西就是把某种东西用数据描述出来,然后用一些样本告诉机器它是什么,或者要对他进行什么操作,训练后,机器就能告诉我们输入的数据是什么,或者自动的进行操作吗?比如输入一堆图片告诉他哪个是猫,以后它就能自动识别猫了;给汽车装上各种传感器采集数据,人开着车操作,一段时间后,它就知道什么情况要怎么操作了,就会自动驾驶了?不知理解得对不对,希望指正。
对的,你说的是其中一类运用,属于机器学习的概念,但可以做到的还远远不止这些,可以多多关注这个领域。深度学习是机器学习的一个分支。TensorFlow是主要用来进行深度学习应用的框架。
2.我是TensorFlow爱好者,现在正在学习,国内的这方面的资料不多,感谢你们提供的资料。我想问一下,学习TensorFlow有什么学习曲线,有没有什么实战的案例?另外在集群模式支持的是不是友好,和Spark集成是不是友好?或者有没有这方面的规划。
书中有特别多的实战例子,欢迎购买!至于对Spark集群的友好,你可以了解一下雅虎最近新开源的TensorFlowOnSpark。
3.看了这个题目的一些提问,发现这个TensorFlow技术,学习曲线还是很陡峭,研究的人还是少数,有什么方法可以把学习曲线降低,更容易入门吗?还有学习这个技术,有什么必要的学科基础要求吗?
可以先通过keras上手,这是一个支持TensorFlow的上层封装。在学习TensorFlow之前,需要有基础的Python编程能力,以及对深度学习有一定了解。不过我现在在和RStudio合作把这个也能放在R里面跑,可以关注一下我的GitHub:terrytangyuan (Yuan (Terry) Tang)。
4.好期待TensorFlow这本书,对于新手看着书入门会有难度吗?要先掌握什么基础知识呢?
可以先看看TensorFlow中文官方站点的文档。本书对新手难度不高。需要一些基础的Python运用能力,还有一些机器学习基础。书中对深度学习有较多的讲解,所以对深度学习的知识要求不高。
5.作为一名成长在Spring技术栈下的码农,转投TensorFlow的话,这本书适合我们入门么?也想请您在机器学习方向上提供一些指导意见,谢谢。
完全可以的,可以学习一下基础的Python语法,学习机器学习,深度学习,尝试做一做相关的小应用,也可以看看雅虎最近出的TensorFlowOnSpark,或从sklearn+numpy+pandas开始。
6.请问如果要学习TensorFlow,数学应该掌握到什么程度,高数,线代,积分都学过还需要再学哪些内容?
如果只是要掌握这门工具,不需要学习太多理论的东西,比如说你如果想利用这门工具来做一些机器学习的运用,我现在做的tf.contrib.learn模块,类似scikit-learn,降低了很多学习的门槛,希望能够帮助到大家。如果想深入做研究的话,你说的这些都是必须要掌握的基础,可以在这基础上多关注一下相关的研究,建立好自己的感兴趣方向。
7.学习TensorFlow需要哪些技术栈,了解TensorFlow需要阅读源码吗?
如果只是想调用高阶的一些模块做一些应用,基本的Python就够了,如果想在某一块做提升的话,能自己学习读代码是再好不过的了,我一开始参与开源软件的时候也是只懂一些基础,可以积极参与开发和讨论,从这个过程中可以学到很多。如果想掌握底层的一些细节,就需要学好C语言之类的了。
最底层还有cuda的代码。这个要看自己的需求,是想了解到什么程度,如果只是用来做应用,想要很快出结果,直接看api就好。如果想对性能进行优化,可能需要阅读源码。
8.与TensorFlow类似的项目有哪些?TensorFlow的优点和缺点是?
还有Caffe、CNTK、MXNet等,在《TensorFlow实战》书中第二章详尽地讲解了TensorFlow与其他学习框架的对比。也可以看这篇文章,摘自书中第2章《TensorFlow和Caffe、CNTK、MXNet等其他7种深度学习框架的对比》。
9.TensorFlow只能部署在Linux机器上?
Mac,Windows,Mobile,RasberryPi都是可以的
二、TensorFlow之性能篇
1.TensoFlow的优点我知道,架构好、跨平台、接口丰富、易部署,而且是大公司的产品。问题就是TensoFlow的性能到底如何,我看过网上几个评测,是不是像以前别人测试中的那样慢的离谱,不管CPU还是GPU跟Torch比都慢不少,(评比原文),更有测试评论说TensoFlow比convnetjs慢100倍(原文地址)。
我简单了解深度学习的算法有很多,效率也不同,我希望知道的是,在同算法的情况下,TensoFlow到底比其它框架慢多少?毕竟性能也是一个很关键的因素。
这些评测是很旧的了,新版的TensorFlow没有这个问题。TensorFlow目前可能在全连接的MLP上稍微慢一点,但是后续XLA会解决这个问题。但是其他比如CNN、RNN等,因为大家主要都使用cuDNN,差异不大,性能基本上非常接近的。性能你可以放心,Google内部全部使用这个框架,如果真有性能慢的话,这么多人使用着早就解决了。
2.机器学习中一般分有监督学习和无监督学习,无监督学习下,用TensorFlow来对某个数据集进行学习,那么它识别出来的特征是什么?还有TensorFlow1.0中加入了XLA,我理解为能把代码翻译成特定的GPU或x86-64的运行代码,是不是只有在做代数运算时才会用上XLA?TensorFlow不是已经在底层用cuda的cuDNN库加速了吗,为什么还要用XLA?
关于无监督学习,书中有讲解。无监督学习在深度学习中一般是自编码器等,提取到的是抽象的高阶特征,去除了噪声。XLA会对几个层叠的操作进行JIT编译。cuda是一门语言,cuDNN是深度学习的库,使用cuda加速也要看是怎么使用它加速,是一层计算执行一次,还是把几层的计算合并在一起执行,XLA做的就是这个,将一些简单的操作编译合并成一个操作。此前TensorFlow训练MLP等网络较慢,使用XLA后有。
3.请问使用TensorFlowOnSpark之后,除了免去数据在HDFS和TensorFlow移动之外,是否能对性能有较好的提升呢?如果不用TensorFlowOnSpark,TensorFlow目前自己的分布式性能是否已经成熟了呢?
目前TensorFlow的分布式算是比较成熟的,但可能还不是最快的。TensorFlowonSpark应该不能提升分布式的性能,毕竟还经过了一层Spark的通信机制处理。
应该选择TensorFlow还是Theano?有使用两个库的用户比较一下这两者。比如从编译速度,运行速度,易用性等角度进行比较。
可以参考这篇文章:也就是我们这本《TensorFlow实战》里面的其中一节:《TensorFlow和Caffe、CNTK、MXNet等其他7种深度学习框架的对比》。
三、TensorFlow之适用场景
1.请问TensorFlow在自然语言处理上有没有优势?
自然语言主要使用RNN、LSTM、GRU等,目前新推出的TensorFLowFold支持DynamicsBatching,计算效率大幅度提升,非常适合做自然语言处理。
2.TensorFlow在实际生产环境中,有什么特别适合的场景呢?
TensorFlow部署非常方便,可用在Android、iOS等客户端,进行图像识别、人脸识别等任务。常见的CTR预估,推荐等任务,也可以轻松地部署到服务器CPU上。
3.TensorFlow有在生产企业中应用的案例吗?
在Google用的特别多,所有会用到深度学习的场景,都可以使用TensorFlow,比如搜索、邮件、语音助手、机器翻译、图片标注等等。
4.TensorFlow在大数据行业的应用和运用怎么样?TensorFlow的源码使用了哪些设计模式?
应用非常广的,谷歌已经在很多项目上用了TensorFlow,比如说Youtubewatchnext,还有很多研究型的项目,谷歌DeepMind以后所有的研究都会使用这个框架。如果对某段代码好奇,可以去参考参考源代码学习学习,很多的设计都是经过内部各种项目和用户的千锤百炼。
Google内部非常多team在使用TensorFlow,比如搜索、邮件、语音、机器翻译等等。数据越大,深度学习效果越好,而支持分布式的TensorFlow就能发挥越大的作用。
5.最近在学习TensorFlow,发现其分布式有in-graph和between-gragh两种架构模式,请问这两种架构的区别是什么?或者是不是应用场景不同?
其实一个in-graph就是模型并行,将模型中不同节点分布式地运行;between-graph就是数据并行,同时训练多个batch的数据。要针对神经网络结构来设计,模型并行实现难度较大,而且需要网络中天然存在很多可以并行的节点。因此一般用数据并行的比较多。
6.TensorFlow实现估值网络,作用和意义在哪里?有没有其他的方法实现估值网络?
估值网络是深度强化学习中的一个模型,可以用来解决常见的强化学习问题,比如下棋,自动玩游戏,机器控制等等。
7.想请问下TF有类似SparkStreaming的模块吗?TF在后端存储上和cassandra或者hdfs的集成上有没有啥需要注意的地方?Spark在集群上依赖Master,然后分发到Worker上,这样的架构感觉不太稳定,不知道TF在分布式是什么架构有没有什么特点?
目前没有类似Streaming的东西,Spark主要用来做数据处理。TensorFlow则更多是对处理后的数据进行训练和学习。
8.TensorFlow对初学者是否太难了?TensorFlow貌似都是研发要用的,对服务器运维会有哪些改变?
TensorFlow针对实际生产也是非常好的。应该是所有框架中最适合实际生产环境的,因为有Google强大的工程团队的支持,所以TensorFlow拥有产品级的代码,稳健的质量,还有适合部署的TensorFlowServing。
9.TensorFlow从个体学习研究到实际生产环境应用,有哪些注意事项?
个人研究的时候没有太多限制,实际上线生成可以使用TensorFlowServing,部署效率比较高。
10.TF的耗能是否可以使其独立工作在离线环境的嵌入式小板上,真正达到可独立的智能机器人。
可以的,使用TensorFlow的嵌入式设备很多。但做机器人涉及到很多步骤,核心部分都设计了机器学习,图像处理之类的,TensorFlow可以用来搭建那些。
11.互联网应用如何结合TensorFlow,能简单介绍一下吗?
互联网应用很多都是推荐系统,比如说Youtubewatchnext的推荐系统就是用到了TensorFlow,现在在tf.contrib.learn里面有专门的Estimator来做WideandDeepLearning(可以查看官网上的例子,我们的书中也有更深一些的讲解),大家也都可以用的。
12.不知道有没有针对传统零售行业的实际案例,比如销售预测的案例。
用深度学习可以做销售预测模型,只要它可以转为一个分类预测的问题。
13.使用TensorFlow的产品有哪些?有比较有代表性的吗?
可以看看我之前的评论,Youtubewatchnext就是其中一个例子,还有很火的AlphaGo。