技术开发 频道

TensorFlow入门简介,新手请看这里!

  【IT168 技术】

  TensorFlow是一个使用数据流图进行数值计算的开源软件库,是谷歌基于DistBelief研发的第二代人工智能学习系统,命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端的计算过程。TensorFlow将复杂的数据结构传输至人工智能神经网络进行分析和处理。

  2017年2月,TensorFlow 1.0版正式发布,其当年的提交数目就已超过2.1万,其中还有部分外部贡献者。

  TensorFlow是跨平台的,它几乎可以运行在所有平台上,比如GPU、CPU、移动和嵌入式平台,甚至是张量处理单元[Tensor Processing Units (TPUs)]。谷歌推出过一款AlphaGo人工智能围棋程序,其工作原理就是基于“深度学习”,并且是第一个击败人类职业选手的人工智能程序。

  TensorFlow支持算法

  TensorFlow表达了高层次的机器学习计算,大大简化了第一代系统(DistBelief),并且具备更好的灵活性和可延展性。TensorFlow一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从手机、单个CPU / GPU直到成百上千GPU卡组成的分布式系统。

  数据流图

  数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入永久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以传送“大小可动态调整”的多维数据数组,即“张量”(tensor)。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行运算。

  TensorFlow的特征与优势

  图片来自Google.com

  机器学习越来越复杂,深度学习模型不断壮大。很多模型图需要进行分布式训练才能在合理的时间范围内迭代,并且研发者通常希望将开发的模型部署到多个平台。

  上图是TensorFlow的一个完整的数据计算结构,它有很多好处:

  •   可移植,因为图形可立刻执行或者保存供以后使用,它可以运行在多个平台,比如:CPU、GPU、TPU、移动平台、嵌入式平台等。此外,它可以部署到生产环境中,不需要依赖任何构建图形的代码,只需要执行它即可。

  •   可转化、可优化,因为图形可以被转换为给定平台的更优版本,这很适用于大型机器的快速移动推理。

  •   支持分布式执行

  跟计算图相结合的TensorFlow高级API可在同一框架中实现丰富灵活的开发环境和强大的生产功能。

  TensorFlow Eager Execution(贪婪执行)

  之前的TensorFlow有一个痛点就是只支持静态图模型。也就是说,之前的TensorFlow在处理数据前必须预先定义好一个完整的模型,如果数据非常完整还好,但是实际的项目中难免有一些特殊情况,很多项目需要大量实验才能选择正确的模型,这实现起来就很麻烦了。

  2017年10月31日,Google发布了TensorFlow Eager Execution(贪婪执行),为TensorFlow添加了命令式编程接口。当你启动Eager时,TensorFlow操作会立刻执行,不用通过Session.run()执行一个预先定义的图。

  Eager Execution有以下四大优点:

  •   可以轻松检查、调试图形的中间值

  •   可以在TensorFlow API—loop, conditional, function, closure等中使用Python控制流

  •   能够使调试更简单

  •   Eager的 "define-by-run"语句将使构建和训练动态图变得更容易

  只要您确认了TensorFlow代码,就可以自动将其转换为图形,这样更容易保存、移植和分发图形。

  TensorFlow开源社区

  TensorFlow在很大程度上是开源的,允许社区贡献者免费使用。TensorFlow团队已经设置了流程来管理提取请求、审查和路由问题。

  目前为止,从小文档修复一直到OS X GPU支持或OpenCL实现等,社区内已经有超过890个外部贡献者添加代码。

  Tensorflow在GitHub上已经超过76,000颗星,而且每个月都在持续增长。

  其中有很多是社区创建的教程、模型、翻译和项目,如果您对机器学习感兴趣,它是一个很好的学习源。比如,目前由TensorFlow团队监控的Stack Overflow就是一个很好的学习社区。

  TensorFlow的内部版本和外部版本除了一些细微差别,比如谷歌内部架构接口,一些尚未准备好的路径等,其他没有什么大的区别。两版TensorFlow核心是相同的,内部的拉取请求会在一天半左右的时间出现在外部,反之亦然。

  TensorFlow在GitHub组织中不仅有TensorFlow,还有其他框架和组件,比如TensorBoard,Project Magenta等。此外,您还可以找到多语言(Python, C++, Java, and Go)的TensorFlow API,并且社区还开发了其他语言接口,例如C#,Haskell,Julia,Ruby,Rust和Scala等。

  TensorFlow开源模型

  TensorFlow团队开源了大量模型,您可以在tensorflow/models repo中找到它们,其中发布的代码不仅包括模型图,还包括训练模型,而且这些模型都是可以开箱即用的。此外您还可以通过“transfer learning(迁移学习)”的过程对一些模型进行优化。

  已经被发布的TensorFlow开源模型如下:对象检测API、tf-seq2seq(用于 Tensorflow 的通用编码器-解码器框架)、ParseySaurus(一组预训练模型,SyntaxNet 的升级版)、Multistyle Pastiche Generator(多样式仿真器)等。

  Transfer learning(迁移学习)

  许多TensorFlow模型都包含可训练、可优化示例,方便研发人员进行Transfer learning(迁移学习)

  用一句话概括就是“为了偷懒, 在训练好的模型上继续训练其他内容, 充分使用原模型的理解力”。有时候也是为了避免再次花费特别长的时间重复训练大型模型。比如,同一类型的项目, 不用自己完全从头做, 借鉴对方的经验, 往往能节省很多时间。顺着这样的思路,有想法的研发人员可以不用花时间重新训练一个无比庞大的神经网络,只要借鉴一个已经训练好的神经网络即可。

  TensorFlow在移动设备上的应用

  移动端是TensorFlow的一个很好的应用,当网络连接不好或者向服务器发送连续数据成本太高时,移动端的作用就显现出来。但是当你训练好模型并且想要使用它时,你可能不希望模型在设备上占用太大空间。

  TensorFlow的项目MobileNet不断在开发计算机视觉模型,用于解决移动设备或嵌入式应用中的速度和准确度问题。

  Android演示之一TF Detect就使用了经过Tensorflow Object Detection API培训过的MobileNet模型。

  图片来自Google.com

  TensorFlow生态系统

  TensorFlow生态系统包含许多工具和库,可以帮助研发者更有效的工作。这里举几个例子:

  TensorBoard

  TensorBoard是一个Web应用程序,它可以把复杂的神经网络训练过程可视化、可以很好的理解、调试并优化程序。研发者可以使用TensorBoard查看TensorFlow模型图。

  Datalab

  Jupyter Notebook 是一款开放源代码的 Web 应用程序,可让我们创建并共享代码和文档。

  它提供了一个环境,你可以在其中记录代码,运行代码,查看结果,可视化数据然后在查看输出结果。这些特性使其成为一款执行端到数据工作流程端的便捷工具,可以用于数据清理,统计建模,构建和训练机器学习模型,可视化数据等。

  Facets

  Facets是一款开源可视化工具,可以帮助用户理解并分析各类机器学习数据集。例如,您可以查看训练和测试数据集,比较每个要素的特征,并按照具体特征对要素进行排序。

  当然,除了这些例子还有很多其他工具和库,本文就不一一介绍了。

1
相关文章