image.png

#点击图片,报名参加深圳源创会#

摘要: 目前看来,对于人工智能这个领域依然有不少怀疑的声音,但不可否认的是,人工智能仍然是未来的发展趋势。而 TensorFlow 作为深度学习框架的领头者,值得大家去了解学习。

image.png

自 TensorFlow 于 2015 年底正式开源,距今已有一年多,不久前,TensorFlow 正式版也发布了。这期间 TensorFlow 不断给人以惊喜,推出了分布式版本,服务框架 TensorFlow Serving,可视化工具 TensorFlow,上层封装 TF.Learn,其他语言(Go、Java、Rust、Haskell)的绑定、Windows 的支持、JIT 编译器 XLA、动态计算图框架 Fold,以及数不胜数的经典模型在 TensorFlow 上的实现(Inception Net、SyntaxNet 等)。在这一年多时间,TensorFlow 已从初入深度学习框架大战的新星,成为了几近垄断的行业事实标准。

目前看来,对于人工智能这个领域依然有不少怀疑的声音,但不可否认的是,人工智能仍然是未来的发展趋势。因此,在高手问答第 142 期里,我们策划了 “TensorFlow 实战” 的主题,并邀请了 @黄文坚 @唐源Terry 作为高手嘉宾。

本文整理了本期高手问答中一些与 TensorFlow 相关的精彩问答。

1

TensorFlow 之入门篇

Q 没接触过,刚了解了一下,这个东西就是把某种东西用数据描述出来,然后用一些样本告诉机器它是什么,或者要对他进行什么操作,训练后,机器就能告诉我们输入的数据是什么,或者自动的进行操作吗?比如输入一堆图片告诉他哪个是猫,以后它就能自动识别猫了;给汽车装上各种传感器采集数据,人开着车操作,一段时间后,它就知道什么情况要怎么操作了,就会自动驾驶了?不知理解得对不对,希望指正。 A 对的,你说的是其中一类运用,属于机器学习的概念,但可以做到的还远远不止这些,可以多多关注这个领域。深度学习是机器学习的一个分支。TensorFlow 是主要用来进行深度学习应用的框架。

Q 我是 TensorFlow 爱好者,现在正在学习,我想问一下,学习 TensorFlow 有什么学习曲线,有没有什么实战的案例?另外在集群模式支持的是不是友好,和 Spark 集成是不是友好?或者有没有这方面的规划。 A 对 Spark 集群的友好,你可以了解一下雅虎最近新开源的 TensorFlowOnSpark。

Q 看了这个题目的一些提问,发现这个 TensorFlow 技术,学习曲线还是很陡峭,研究的人还是少数,有什么方法可以把学习曲线降低,更容易入门吗?还有学习这个技术,有什么必要的学科基础要求吗? A 可以先通过 keras 上手,这是一个支持 TensorFlow 的上层封装。在学习 TensorFlow 之前,需要有基础的 Python 编程能力,以及对深度学习有一定了解。不过我现在在和 RStudio 合作把这个也能放在 R 里面跑,可以关注一下我的 GitHub:https://github.com/terrytangyuan。

Q 好期待 TensorFlow 这本书,对于新手看着书入门会有难度吗?要先掌握什么基础知识呢? A 可以先看看 TensorFlow 中文官方站点的文档。本书对新手难度不高。需要一些基础的 Python 运用能力,还有一些机器学习基础。书中对深度学习有较多的讲解,所以对深度学习的知识要求不高。

Q 作为一名成长在 Spring 技术栈下的码农,转投 TensorFlow 的话,这本书适合我们入门么?也想请您在机器学习方向上提供一些指导意见,谢谢。 A 完全可以的,可以学习一下基础的 Python 语法,学习机器学习,深度学习,尝试做一做相关的小应用,也可以看看雅虎最近出的 TensorFlowOnSpark,或从 sklearn+numpy+pandas 开始。

Q 请问如果要学习 TensorFlow,数学应该掌握到什么程度,高数,线代,积分都学过还需要再学哪些内容? A 如果只是要掌握这门工具,不需要学习太多理论的东西,比如说你如果想利用这门工具来做一些机器学习的运用,我现在做的 tf.contrib.learn 模块,类似 scikit-learn,降低了很多学习的门槛,希望能够帮助到大家。如果想深入做研究的话,你说的这些都是必须要掌握的基础,可以在这基础上多关注一下相关的研究,建立好自己的感兴趣方向。

Q 学习 TensorFlow 需要哪些技术栈,了解 TensorFlow 需要阅读源码吗? A 如果只是想调用高阶的一些模块做一些应用,基本的 Python 就够了,如果想在某一块做提升的话,能自己学习读代码是再好不过的了,我一开始参与开源软件的时候也是只懂一些基础,可以积极参与开发和讨论,从这个过程中可以学到很多。如果想掌握底层的一些细节,就需要学好 C 语言之类的了。

最底层还有 cuda 的代码。这个要看自己的需求,是想了解到什么程度,如果只是用来做应用,想要很快出结果,直接看 api 就好。如果想对性能进行优化,可能需要阅读源码。

Q 与 TensorFlow 类似的项目有哪些?TensorFlow 的优点和缺点是? A 还有 Caffe、CNTK、MXNet 等,在《TensorFlow实战》书中第二章详尽地讲解了 TensorFlow 与其他学习框架的对比。也可以看这篇文章,摘自书中第 2 章http://mt.sohu.com/20170219/n481131001.shtml

Q TensorFlow 只能部署在 Linux 机器上? A Mac, Windows, Mobile, Rasberry Pi 都是可以的

2

TensorFlow 之性能篇

Q TensoFlow 的优点我知道,架构好、跨平台、接口丰富、易部署,而且是大公司的产品。问题就是 TensoFlow 的性能到底如何,我看过网上几个评测,是不是像以前别人测试中的那样慢的离谱,不管 CPU 还是 GPU 跟 Torch 比都慢不少,评比原文(>>>戳这里),更有测试评论说 TensoFlow 比 convnetjs 慢 100 倍,原文地址。

我简单了解深度学习的算法有很多,效率也不同,我希望知道的是,在同算法的情况下,TensoFlow 到底比其它框架慢多少?毕竟性能也是一个很关键的因素。

A 这些评测是很旧的了,新版的 TensorFlow 没有这个问题。TensorFlow 目前可能在全连接的 MLP 上稍微慢一点,但是后续 XLA 会解决这个问题。但是其他比如 CNN、RNN 等,因为大家主要都使用 cuDNN,差异不大,性能基本上非常接近的。性能你可以放心,Google 内部全部使用这个框架,如果真有性能慢的话,这么多人使用着早就解决了。

Q 机器学习中一般分有监督学习和无监督学习,无监督学习下,用 TensorFlow 来对某个数据集进行学习,那么它识别出来的特征是什么?还有 TensorFlow1.0 中加入了 XLA,我理解为能把代码翻译成特定的 GPU 或 x86-64 的运行代码,是不是只有在做代数运算时才会用上 XLA?TensorFlow 不是已经在底层用cuda 的 cuDNN 库加速了吗,为什么还要用 XLA? A 关于无监督学习,书中有讲解。无监督学习在深度学习中一般是自编码器等,提取到的是抽象的高阶特征,去除了噪声。XLA 会对几个层叠的操作进行 JIT 编译。cuda 是一门语言,cuDNN 是深度学习的库,使用 cuda 加速也要看是怎么使用它加速,是一层计算执行一次,还是把几层的计算合并在一起执行,XLA 做的就是这个,将一些简单的操作编译合并成一个操作。此前 TensorFlow 训 练 MLP 等网络较慢,使用 XLA 后有。

Q 请问使用 TensorFlowOnSpark 之后,除了免去数据在 HDFS 和 TensorFlow 移动之外,是否能对性能有较好的提升呢?如果不用 TensorFlowOnSpark,TensorFlow 目前自己的分布式性能是否已经成熟了呢? A 目前 TensorFlow 的分布式算是比较成熟的,但可能还不是最快的。TensorFlowonSpark 应该不能提升分布式的性能,毕竟还经过了一层 Spark 的通信机制处理。

Q 应该选择 TensorFlow 还是 Theano?有使用两个库的用户比较一下这两者。比如从编译速度,运行速度,易用性等角度进行比较。 A 可以参考这篇文章: 也就是我们这本《TensorFlow实战》里面的其中一节(请戳“阅读原文”获取)

3

TensorFlow 之适用场景

Q 请问 TensorFlow 在自然语言处理上有没有优势? A 自然语言主要使用 RNN、LSTM、GRU 等,目前新推出的 TensorFLow Fold 支持 Dynamics Batching,计算效率大幅度提升,非常适合做自然语言处理。

Q TensorFlow 在实际生产环境中,有什么特别适合的场景呢? A TensorFlow 部署非常方便,可用在 Android、iOS 等客户端,进行图像识别、人脸识别等任务。常见的 CTR 预估,推荐等任务,也可以轻松地部署到服务器 CPU 上。

Q TensorFlow 有在生产企业中应用的案例吗? A 在 Google 用的特别多,所有会用到深度学习的场景,都可以使用 TensorFlow,比如搜索、邮件、语音助手、机器翻译、图片标注等等。

Q TensorFlow 在大数据行业的应用和运用怎么样?TensorFlow 的源码使用了哪些设计模式? A 应用非常广的,谷歌已经在很多项目上用了 TensorFlow,比如说 Youtube watch next,还有很多研究型的项目,谷歌 DeepMind 以后所有的研究都会使用这个框架。如果对某段代码好奇,可以去参考参考源代码学习学习,很多的设计都是经过内部各种项目和用户的千锤百炼。

Google 内部非常多 team 在使用 TensorFlow,比如搜索、邮件、语音、机器翻译等等。数据越大,深度学习效果越好,而支持分布式的 TensorFlow 就能发挥越大的作用。

Q 最近在学习 TensorFlow,发现其分布式有 in-graph 和 between-gragh 两种架构模式,请问这两种架构的区别是什么?或者是不是应用场景不同? A 其实一个 in-graph 就是模型并行,将模型中不同节点分布式地运行;between-graph 就是数据并行,同时训练多个 batch 的数据。要针对神经网络结构来设计,模型并行实现难度较大,而且需要网络中天然存在很多可以并行的节点。因此一般用数据并行的比较多。

Q TensorFlow实现估值网络 ,作用和意义在哪里? 有没有其他的方法实现估值网络? A 估值网络是深度强化学习中的一个模型,可以用来解决常见的强化学习问题,比如下棋,自动玩游戏,机器控制等等。

Q 想请问下 TF 有类似 Spark Streaming 的模块吗?TF 在后端存储上和 cassandra 或者 hdfs 的集成上有没有啥需要注意的地方?Spark 在集群上依赖 Master,然后分发到 Worker 上,这样的架构感觉不太稳定,不知道 TF 在分布式是什么架构有没有什么特点? A 目前没有类似 Streaming 的东西,Spark 主要用来做数据处理。TensorFlow 则更多是对处理后的数据进行训练和学习。

Q TensorFlow 对初学者是否太难了?TensorFlow 貌似都是研发要用的,对服务器运维会有哪些改变? A TensorFlow 针对实际生产也是非常好的。应该是所有框架中最适合实际生产环境的,因为有 Google 强大的工程团队的支持,所以 TensorFlow 拥有产品级的代码,稳健的质量,还有适合部署的 TensorFlow Serving。

Q TensorFlow 从个体学习研究到实际生产环境应用,有哪些注意事项? A 个人研究的时候没有太多限制,实际上线生成可以使用 TensorFlow Serving,部署效率比较高。

Q TF 的耗能是否可以使其独立工作在离线环境的嵌入式小板上,真正达到可独立的智能机器人。 A 可以的,使用 TensorFlow 的嵌入式设备很多。但做机器人涉及到很多步骤,核心部分都设计了机器学习,图像处理之类的,TensorFlow 可以用来搭建那些。

Q 互联网应用如何结合 TensorFlow,能简单介绍一下吗? A 互联网应用很多都是推荐系统,比如说 Youtube watch next 的推荐系统就是用到了 TensorFlow,现在在 tf.contrib.learn 里面有专门的 Estimator 来做 Wide and Deep Learning(可以查看官网上的例子,我们的书中也有更深一些的讲解),大家也都可以用的。

Q 不知道有没有针对传统零售行业的实际案例,比如销售预测的案例。 A 用深度学习可以做销售预测模型,只要它可以转为一个分类预测的问题。

Q 使用 TensorFlow 的产品有哪些?有比较有代表性的吗? A 可以看看我之前的评论,Youtube watch next 就是其中一个例子,还有很火的 AlphaGo。

4

TensorFlow 之实战篇

Q 现在在用 TensorFlow 实现图像分类的例子,参考的是 CIFAR-10,输入图片会被随机裁剪为 24x24 的大小,而且训练效率较慢(用了近 20 小时,已使用了 GPU),是否有其他方法来提高效率?TensorFlow 有分布式的处理方法吗,若采用分布式,是否要手动将每一台机器上的训练结果进行合并?若提高裁剪的大小,是否能提高准确率?另外,网上有评论说 TensorFlow 的 C/C++ 接口没有 Caffe 友好,这个您怎么看? A 提高裁剪的大小,会降低样本量,准确率不一定提高。训练 20 多小时是用了多少 epoch?可以通过 tensorboard 观看准确率变化,不一定要训练特别多 epoch。TensorFlow 有分布式的训练,不需要手动,有比较好用的接口,在《TensorFlow实战》中有详细的例子如何使用分布式版本。TF 的 C/C++ 接口很完善,有没有 caffe 友好这个见仁见智。

Q 想问一下 TensorFlow 和 Spark 结合的框架,例如 TensorFlow on Spark,目前是否已经成熟可用?另外,TensorFlow 新版本增加了对 Java API 的支持,如果不使用 Python 语言,所有功能都直接使用 Java 语言进行相关开发是否已经可行? A Java API 目前还不太成熟,很多还有待实现,TensorFlowOnSpark 也挺有意思的,可以在现有的 Spark/Hadoop 分布式集群的基础上部署 TensorFlow 的程序,这样可以避免数据在已有 Spark/Hadoop 集群和深度学习集群间移动,HDFS 里面的数据能够更好的输入进 TensorFlow 的程序当中。至于成熟不成熟我就不清楚了,毕竟自己还没有试过,不过稍微看了看雅虎自己有使用。

Q 对其他的一些机器学习的库接触过一些,要出一个好的效果,对算法选取和参数设置及调节这些方面,希望能给些建议。算法比较多,该如何从分析维度去选取合适的算法? A 我觉得最好的方法就是参加数据科学竞赛,比如说 Kaggle,通过融入在大家的讨论当中,实际操作和锻炼,你可以很快的理解各种参数的意义和一些比较好的参数范围。

对于一般的数值、种类等特征的数据集,XGboost 和 Lightgbm 都有很好的效果。如果你的数据量很大,或者是图片、视频、语音、语言、时间序列,那么使用深度学习将能获得很好的效果。

Q 打算做个文章分析类的东东,比如,分析一篇新闻的要素(时间、地点、人物),用 TensorFlow 应该怎么着手? A 这个问题应该先看看 NLP(自然语言处理)相关的内容,TensorFlow 是实现你算法的工具。但是前提是你得知道应该使用什么算法。

Q TensorFlow 对于分布式 GPU 支持吗?如何选择 TensorFlow 和 XGboost? A TensorFlow 支持分布式 GPU,用于深度学习。XGBoost 主要是做 gradient boosting 这一块,最近也有人贡献了代码使它能够的 GPU 上跑,可以做一做实验比较一下。毕竟 XGboost 是经过 kaggle 用户的千锤百炼,很多都已经能够满足他们的需求了。

Q 现在学习 TensorFlow 有没有合适的数据可以使用的? A TensorFlow 中自带了 MNIST 和 CIFAR 数据的下载程序,其他常用的,比如 ImageNet, Gigaword 等数据集需要自己下载。

Q BNN分类器训练出的曲线是高次多项式吗? A 你说的 BNN 是指?如果神经网络中没有激活函数,那输出的结果只是输入的线性变换。但是加入了激活函数后,就不是高次多项式了。

5

其他相关的问题

Q TensorFlow 的发展趋势是怎么样的? A 会集成越来越多的 contrib 模块,添加很多方便的上层接口,支持更多的语言绑定。同时新推出的 XLA(JIT编译器),Fold(Dynamics Batching)都是未来的大方向。

Q 个人开发者做 TensorFlow 应用和开发有前途吗?还是说数据和资料都在大公司,没有合适的、相当数量的数据喂养是无法训练好模型的? A 不仅仅限制在深度学习领域,现在 TensorFlow 也提供很多机器学习的 Estimators,我贡献的大部分都在这一块,可以了解一下 tf.contrib.learn 这个模块,书中有很多机器学习的例子。

另外就是具体要看你做什么任务,当然数据是需要的,但是现在也有很多公开的数据。大公司的数据虽多,但是质量也并不是非常高。 https://mp.weixin.qq.com/s/P4119U9ld5qPAi1JSH8ttA