从入门到实战,TensorFlow 带你走进深度学习的世界
Posted OSC开源社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从入门到实战,TensorFlow 带你走进深度学习的世界相关的知识,希望对你有一定的参考价值。
#点击图片,报名参加深圳源创会#
摘要: 目前看来,对于人工智能这个领域依然有不少怀疑的声音,但不可否认的是,人工智能仍然是未来的发展趋势。而 TensorFlow 作为深度学习框架的领头者,值得大家去了解学习。
自 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 之入门篇
没接触过,刚了解了一下,这个东西就是把某种东西用数据描述出来,然后用一些样本告诉机器它是什么,或者要对他进行什么操作,训练后,机器就能告诉我们输入的数据是什么,或者自动的进行操作吗?比如输入一堆图片告诉他哪个是猫,以后它就能自动识别猫了;给汽车装上各种传感器采集数据,人开着车操作,一段时间后,它就知道什么情况要怎么操作了,就会自动驾驶了?不知理解得对不对,希望指正。
对的,你说的是其中一类运用,属于机器学习的概念,但可以做到的还远远不止这些,可以多多关注这个领域。深度学习是机器学习的一个分支。TensorFlow 是主要用来进行深度学习应用的框架。
我是 TensorFlow 爱好者,现在正在学习,我想问一下,学习 TensorFlow 有什么学习曲线,有没有什么实战的案例?另外在集群模式支持的是不是友好,和 Spark 集成是不是友好?或者有没有这方面的规划。
对 Spark 集群的友好,你可以了解一下雅虎最近新开源的 TensorFlowOnSpark。
看了这个题目的一些提问,发现这个 TensorFlow 技术,学习曲线还是很陡峭,研究的人还是少数,有什么方法可以把学习曲线降低,更容易入门吗?还有学习这个技术,有什么必要的学科基础要求吗?
可以先通过 keras 上手,这是一个支持 TensorFlow 的上层封装。在学习 TensorFlow 之前,需要有基础的 Python 编程能力,以及对深度学习有一定了解。不过我现在在和 RStudio 合作把这个也能放在 R 里面跑,可以关注一下我的 GitHub:https://github.com/terrytangyuan。
好期待 TensorFlow 这本书,对于新手看着书入门会有难度吗?要先掌握什么基础知识呢?
可以先看看 TensorFlow 中文官方站点的文档。本书对新手难度不高。需要一些基础的 Python 运用能力,还有一些机器学习基础。书中对深度学习有较多的讲解,所以对深度学习的知识要求不高。
作为一名成长在 Spring 技术栈下的码农,转投 TensorFlow 的话,这本书适合我们入门么?也想请您在机器学习方向上提供一些指导意见,谢谢。
完全可以的,可以学习一下基础的 Python 语法,学习机器学习,深度学习,尝试做一做相关的小应用,也可以看看雅虎最近出的 TensorFlowOnSpark,或从 sklearn+numpy+pandas 开始。
请问如果要学习 TensorFlow,数学应该掌握到什么程度,高数,线代,积分都学过还需要再学哪些内容?
如果只是要掌握这门工具,不需要学习太多理论的东西,比如说你如果想利用这门工具来做一些机器学习的运用,我现在做的 tf.contrib.learn 模块,类似 scikit-learn,降低了很多学习的门槛,希望能够帮助到大家。如果想深入做研究的话,你说的这些都是必须要掌握的基础,可以在这基础上多关注一下相关的研究,建立好自己的感兴趣方向。
学习 TensorFlow 需要哪些技术栈,了解 TensorFlow 需要阅读源码吗?
如果只是想调用高阶的一些模块做一些应用,基本的 Python 就够了,如果想在某一块做提升的话,能自己学习读代码是再好不过的了,我一开始参与开源软件的时候也是只懂一些基础,可以积极参与开发和讨论,从这个过程中可以学到很多。如果想掌握底层的一些细节,就需要学好 C 语言之类的了。
最底层还有 cuda 的代码。这个要看自己的需求,是想了解到什么程度,如果只是用来做应用,想要很快出结果,直接看 api 就好。如果想对性能进行优化,可能需要阅读源码。
与 TensorFlow 类似的项目有哪些?TensorFlow 的优点和缺点是?
还有 Caffe、CNTK、MXNet 等,在《TensorFlow实战》书中第二章详尽地讲解了 TensorFlow 与其他学习框架的对比。也可以看这篇文章,摘自书中第 2 章http://mt.sohu.com/20170219/n481131001.shtml
TensorFlow 只能部署在 Linux 机器上?
Mac, Windows, Mobile, Rasberry Pi 都是可以的
2
TensorFlow 之性能篇
我简单了解深度学习的算法有很多,效率也不同,我希望知道的是,在同算法的情况下,TensoFlow 到底比其它框架慢多少?毕竟性能也是一个很关键的因素。
这些评测是很旧的了,新版的 TensorFlow 没有这个问题。TensorFlow 目前可能在全连接的 MLP 上稍微慢一点,但是后续 XLA 会解决这个问题。但是其他比如 CNN、RNN 等,因为大家主要都使用 cuDNN,差异不大,性能基本上非常接近的。性能你可以放心,Google 内部全部使用这个框架,如果真有性能慢的话,这么多人使用着早就解决了。
机器学习中一般分有监督学习和无监督学习,无监督学习下,用 TensorFlow 来对某个数据集进行学习,那么它识别出来的特征是什么?还有 TensorFlow1.0 中加入了 XLA,我理解为能把代码翻译成特定的 GPU 或 x86-64 的运行代码,是不是只有在做代数运算时才会用上 XLA?TensorFlow 不是已经在底层用cuda 的 cuDNN 库加速了吗,为什么还要用 XLA?
关于无监督学习,书中有讲解。无监督学习在深度学习中一般是自编码器等,提取到的是抽象的高阶特征,去除了噪声。XLA 会对几个层叠的操作进行 JIT 编译。cuda 是一门语言,cuDNN 是深度学习的库,使用 cuda 加速也要看是怎么使用它加速,是一层计算执行一次,还是把几层的计算合并在一起执行,XLA 做的就是这个,将一些简单的操作编译合并成一个操作。此前 TensorFlow 训 练 MLP 等网络较慢,使用 XLA 后有。
请问使用 TensorFlowOnSpark 之后,除了免去数据在 HDFS 和 TensorFlow 移动之外,是否能对性能有较好的提升呢?如果不用 TensorFlowOnSpark,TensorFlow 目前自己的分布式性能是否已经成熟了呢?
目前 TensorFlow 的分布式算是比较成熟的,但可能还不是最快的。TensorFlowonSpark 应该不能提升分布式的性能,毕竟还经过了一层 Spark 的通信机制处理。
应该选择 TensorFlow 还是 Theano?有使用两个库的用户比较一下这两者。比如从编译速度,运行速度,易用性等角度进行比较。
可以参考这篇文章: 也就是我们这本《TensorFlow实战》里面的其中一节(请戳“阅读原文”获取)
3
TensorFlow 之适用场景
请问 TensorFlow 在自然语言处理上有没有优势?
自然语言主要使用 RNN、LSTM、GRU 等,目前新推出的 TensorFLow Fold 支持 Dynamics Batching,计算效率大幅度提升,非常适合做自然语言处理。
TensorFlow 在实际生产环境中,有什么特别适合的场景呢?
TensorFlow 部署非常方便,可用在 android、ios 等客户端,进行图像识别、人脸识别等任务。常见的 CTR 预估,推荐等任务,也可以轻松地部署到服务器 CPU 上。
TensorFlow 有在生产企业中应用的案例吗?
在 Google 用的特别多,所有会用到深度学习的场景,都可以使用 TensorFlow,比如搜索、邮件、语音助手、机器翻译、图片标注等等。
TensorFlow 在大数据行业的应用和运用怎么样?TensorFlow 的源码使用了哪些设计模式?
应用非常广的,谷歌已经在很多项目上用了 TensorFlow,比如说 Youtube watch next,还有很多研究型的项目,谷歌 DeepMind 以后所有的研究都会使用这个框架。如果对某段代码好奇,可以去参考参考源代码学习学习,很多的设计都是经过内部各种项目和用户的千锤百炼。
Google 内部非常多 team 在使用 TensorFlow,比如搜索、邮件、语音、机器翻译等等。数据越大,深度学习效果越好,而支持分布式的 TensorFlow 就能发挥越大的作用。
最近在学习 TensorFlow,发现其分布式有 in-graph 和 between-gragh 两种架构模式,请问这两种架构的区别是什么?或者是不是应用场景不同?
其实一个 in-graph 就是模型并行,将模型中不同节点分布式地运行;between-graph 就是数据并行,同时训练多个 batch 的数据。要针对神经网络结构来设计,模型并行实现难度较大,而且需要网络中天然存在很多可以并行的节点。因此一般用数据并行的比较多。
TensorFlow实现估值网络 ,作用和意义在哪里? 有没有其他的方法实现估值网络?
估值网络是深度强化学习中的一个模型,可以用来解决常见的强化学习问题,比如下棋,自动玩游戏,机器控制等等。
想请问下 TF 有类似 Spark Streaming 的模块吗?TF 在后端存储上和 cassandra 或者 hdfs 的集成上有没有啥需要注意的地方?Spark 在集群上依赖 Master,然后分发到 Worker 上,这样的架构感觉不太稳定,不知道 TF 在分布式是什么架构有没有什么特点?
目前没有类似 Streaming 的东西,Spark 主要用来做数据处理。TensorFlow 则更多是对处理后的数据进行训练和学习。
TensorFlow 对初学者是否太难了?TensorFlow 貌似都是研发要用的,对服务器运维会有哪些改变?
TensorFlow 针对实际生产也是非常好的。应该是所有框架中最适合实际生产环境的,因为有 Google 强大的工程团队的支持,所以 TensorFlow 拥有产品级的代码,稳健的质量,还有适合部署的 TensorFlow Serving。
TensorFlow 从个体学习研究到实际生产环境应用,有哪些注意事项?
个人研究的时候没有太多限制,实际上线生成可以使用 TensorFlow Serving,部署效率比较高。
TF 的耗能是否可以使其独立工作在离线环境的嵌入式小板上,真正达到可独立的智能机器人。
可以的,使用 TensorFlow 的嵌入式设备很多。但做机器人涉及到很多步骤,核心部分都设计了机器学习,图像处理之类的,TensorFlow 可以用来搭建那些。
互联网应用如何结合 TensorFlow,能简单介绍一下吗?
互联网应用很多都是推荐系统,比如说 Youtube watch next 的推荐系统就是用到了 TensorFlow,现在在 tf.contrib.learn 里面有专门的 Estimator 来做 Wide and Deep Learning(可以查看官网上的例子,我们的书中也有更深一些的讲解),大家也都可以用的。
不知道有没有针对传统零售行业的实际案例,比如销售预测的案例。
用深度学习可以做销售预测模型,只要它可以转为一个分类预测的问题。
使用 TensorFlow 的产品有哪些?有比较有代表性的吗?
可以看看我之前的评论,Youtube watch next 就是其中一个例子,还有很火的 AlphaGo。
4
TensorFlow 之实战篇
现在在用 TensorFlow 实现图像分类的例子,参考的是 CIFAR-10,输入图片会被随机裁剪为 24x24 的大小,而且训练效率较慢(用了近 20 小时,已使用了 GPU),是否有其他方法来提高效率?TensorFlow 有分布式的处理方法吗,若采用分布式,是否要手动将每一台机器上的训练结果进行合并?若提高裁剪的大小,是否能提高准确率?另外,网上有评论说 TensorFlow 的 C/C++ 接口没有 Caffe 友好,这个您怎么看?
提高裁剪的大小,会降低样本量,准确率不一定提高。训练 20 多小时是用了多少 epoch?可以通过 tensorboard 观看准确率变化,不一定要训练特别多 epoch。TensorFlow 有分布式的训练,不需要手动,有比较好用的接口,在《TensorFlow实战》中有详细的例子如何使用分布式版本。TF 的 C/C++ 接口很完善,有没有 caffe 友好这个见仁见智。
想问一下 TensorFlow 和 Spark 结合的框架,例如 TensorFlow on Spark,目前是否已经成熟可用?另外,TensorFlow 新版本增加了对 Java API 的支持,如果不使用 Python 语言,所有功能都直接使用 Java 语言进行相关开发是否已经可行?
Java API 目前还不太成熟,很多还有待实现,TensorFlowOnSpark 也挺有意思的,可以在现有的 Spark/Hadoop 分布式集群的基础上部署 TensorFlow 的程序,这样可以避免数据在已有 Spark/Hadoop 集群和深度学习集群间移动,HDFS 里面的数据能够更好的输入进 TensorFlow 的程序当中。至于成熟不成熟我就不清楚了,毕竟自己还没有试过,不过稍微看了看雅虎自己有使用。
对其他的一些机器学习的库接触过一些,要出一个好的效果,对算法选取和参数设置及调节这些方面,希望能给些建议。算法比较多,该如何从分析维度去选取合适的算法?
我觉得最好的方法就是参加数据科学竞赛,比如说 Kaggle,通过融入在大家的讨论当中,实际操作和锻炼,你可以很快的理解各种参数的意义和一些比较好的参数范围。
对于一般的数值、种类等特征的数据集,XGboost 和 Lightgbm 都有很好的效果。如果你的数据量很大,或者是图片、视频、语音、语言、时间序列,那么使用深度学习将能获得很好的效果。
打算做个文章分析类的东东,比如,分析一篇新闻的要素(时间、地点、人物),用 TensorFlow 应该怎么着手?
这个问题应该先看看 NLP(自然语言处理)相关的内容,TensorFlow 是实现你算法的工具。但是前提是你得知道应该使用什么算法。
TensorFlow 对于分布式 GPU 支持吗?如何选择 TensorFlow 和 XGboost?
TensorFlow 支持分布式 GPU,用于深度学习。XGBoost 主要是做 gradient boosting 这一块,最近也有人贡献了代码使它能够的 GPU 上跑,可以做一做实验比较一下。毕竟 XGboost 是经过 kaggle 用户的千锤百炼,很多都已经能够满足他们的需求了。
现在学习 TensorFlow 有没有合适的数据可以使用的?
TensorFlow 中自带了 MNIST 和 CIFAR 数据的下载程序,其他常用的,比如 ImageNet, Gigaword 等数据集需要自己下载。
BNN分类器训练出的曲线是高次多项式吗?
你说的 BNN 是指?如果神经网络中没有激活函数,那输出的结果只是输入的线性变换。但是加入了激活函数后,就不是高次多项式了。
5
其他相关的问题
TensorFlow 的发展趋势是怎么样的?
会集成越来越多的 contrib 模块,添加很多方便的上层接口,支持更多的语言绑定。同时新推出的 XLA(JIT编译器),Fold(Dynamics Batching)都是未来的大方向。
个人开发者做 TensorFlow 应用和开发有前途吗?还是说数据和资料都在大公司,没有合适的、相当数量的数据喂养是无法训练好模型的?
不仅仅限制在深度学习领域,现在 TensorFlow 也提供很多机器学习的 Estimators,我贡献的大部分都在这一块,可以了解一下 tf.contrib.learn 这个模块,书中有很多机器学习的例子。
另外就是具体要看你做什么任务,当然数据是需要的,但是现在也有很多公开的数据。大公司的数据虽多,但是质量也并不是非常高。
以上是关于从入门到实战,TensorFlow 带你走进深度学习的世界的主要内容,如果未能解决你的问题,请参考以下文章
学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码
分享《深度学习之TensorFlow:入门原理与进阶实战》PDF+源代码
分享《深度学习之TensorFlow:入门原理与进阶实战》PDF+源代码
分享《深度学习之TensorFlow:入门原理与进阶实战》PDF+源代码