美文网首页AI时代
Tensorflow 2.0 到底好在哪里?

Tensorflow 2.0 到底好在哪里?

作者: b121bd095a24 | 来源:发表于2019-08-07 16:23 被阅读5次

    TensorFlow 现在已经不仅是一个单纯的工具包了,而是发展成为了一个平台,在易用性、分布式训练和部署等方面都取得了长足的进步。

    如今已经没有人质疑机器学习和深度学习的重要性了。数十年来这一行业让人们见识过无数承诺、骗局和失望,时至今日两大技术终于带来了众多实际应用。机器学习或深度学习应用离充分完善还有很长的路要走,但现有的成果已经非常喜人了。

    在所有优秀的机器学习和深度学习框架中,TensorFlow 是最成熟的,在研究论文中被引用最多(就算排除谷歌员工的引用也是如此),也有着最出色的生产实践案例。它可能不是最容易学习的框架,但比起它 2016 年刚发布时的情况,现在的 TensorFlow 对新人要友好得多。TensorFlow 还是许多谷歌服务的基础。

    TensorFlow 2.0 网站将该项目描述为“端到端开源机器学习平台”。实际上 TensorFlow 已进化成为一个更全面的“工具、库和社区资源生态系统”,可帮助研究人员构建和部署人工智能助力的应用。

    TensorFlow 2.0 有四大组成部分:

    1.TensorFlow 核心,一个用于开发和训练机器学习模型的开源库;

    2.TensorFlow.js,一个用于在浏览器和 Node.js 上训练和部署模型的 JavaScript 库;

    3.Lite,一个轻量级库,用于在移动和嵌入式设备上部署模型;

    4.TensorFlow Extended,一个在大型生产环境中准备数据、训练、验证和部署模型的平台。

    TensorFlow 2.0 生态系统包括对 Python、JavaScript 和 Swift 的支持,以及对云、浏览器和边缘设备的部署支持。TensorBoard(可视化)和 TensorFlow Hub(模型库)都是很有用的工具。TensorFlow Extended(TFX)则支持端到端生产流水线。

    这些年来,TensorFlow 逐渐发展为基于数据流图的机器学习和神经网络库,拥有较高的学习曲线和一个底层 API。对普通人来说 TensorFlow 2.0 已经不再那么难学了,2.0 版本还拥有一个高级 Keras API,支持在 JavaScript 中运行、在移动和嵌入式设备上部署以及在大型生产环境中运行。

    TensorFlow 核心

    TensorFlow 2.0 的设计重点就是简洁易用,它的新特性包括 Eager Execution、直观的高级 API 以及在任何平台上灵活构建模型等更新。前两个特性值得深入研究。

    Eager Execution

    Eager Execution 意味着 TensorFlow 代码被定义后会立即运行,而不是先将节点和边缘添加一个图上,稍后再在一个会话中运行——后者是 TensorFlow 原来使用的模式。例如,TensorFlow r0.10 早期版本的“Hello,World!”脚本如下所示:

    注意这里使用的 tf.Session() 和 sess.run()。在 TensorFlow 2.0 中,Eager Execution 模式是默认的,如下例所示。

    TensorFlow 2.0 中的 Eager Execution 示意。这个笔记本可以在谷歌 Colab 中运行,或者在安装好预设的 Jupyter 笔记本中也能运行。

    tf.keras

    前面的两个示例都使用了底层 TensorFlow API。“活用 TensorFlow 2.0 指南”则使用了高级别的 tf.kerasAPI 取代了旧的底层 API;这将大大减少你需要编写的代码量。你只需要每层写一行代码就能构建 Keras 神经网络,如果能善用循环结构的话需要的代码就更少了。下面的示例演示了 Keras 数据集和顺序模型 API,它们运行在谷歌 Colab 中;谷歌 Colab 用来运行 TensorFlow 样本和实验很方便(还是免费的)。请注意,Colab 除了 CPU 外还提供了 GPU 和 TPU 实例。

    上图是一个 TensorFlow 笔记本,用于训练基本的深度神经网络对 MNIST 手写数字图像进行分类。这是在谷歌 Colab 上运行的 TensorFlow 示例笔记本。注意这里使用了 tf.keras.datasets 来提供 MNIST 图像。

    过渡到 TensorFlow 2.0

    在撰写本文时,从 TensorFlow 1.14 到 TensorFlow 2.0 的过渡还在进行中,如下面的截图所示。目前有两个待办事项、23 个正在进行的任务以及 34 个已完成的任务。正在进行的任务中既有完全没有进展的(可能是因为当事人退出),也有几乎完成的(代码已进入存储库主分支,但尚未经过审查和部署)。

    将模型升级到 TensorFlow 2.0

    就像很多开源项目的大版本更新一样,TensorFlow 2.0 对 API 引入了许多重大更改,需要你随之升级你的代码。所幸我们有一个随 TensorFlow 2.0 自动安装的 Python 代码升级脚本,还有一个给无法升级的 API 符号用的兼容模块(compat.v1),只需使用字符串替换即可。运行升级脚本后,你的程序可能会在 TensorFlow 2.0 上运行,但是会引用 tf.compat.v1 命名空间,你得在有空的时候处理一下以保持代码清洁。此外,你可以将 GitHub repos 上的 Jupyter 笔记本升级到 TensorFlow 2.0。

    使用 tf.function

    Eager Execution 模式的缺点是可能会损失一些编译和执行流程图的性能。有一种方法可以在不完全关闭 Eager Execution 模式的情况下恢复性能,它就是 tf.function。

    基本上,当你使用 @tf.function 注释一个函数时后者将被编译成一个图,它和它调用的任何函数就(可能)更快地执行、支持在 GPU 或 TPU 上运行,还支持导出到 SavedModel。tf.function 的一项便利的新功能是 AutoGraph,它自动将 Python 控制流语句编译为 TensorFlow 控制操作。

    分布式训练

    以前我研究 TensorFlow 时有两种方法可以运行分布式训练:使用异步参数服务器,或使用第三方的 Horovod 项目——该项目是同步的并使用 all-reduce 算法。现在新版有五种原生的 TensorFlow 分布式策略,以及一个用于选择所需策略的 API,tf.distribute.Strategy;它允许你跨多个 GPU、多台计算机或多个 TPU 分发训练。此 API 还可用于在不同平台上分发评估和预测。

    TensorFlow 现在支持五种原生分布式策略,TensorFlow 2.0 beta 还对三种训练 API 提供不同级别的支持。

    TensorFlow.js

    TensorFlow.js是一个用于在 JavaScript 中开发和训练机器学习模型并在浏览器或 Node.js 中部署它们的库。还有一个基于 TensorFlow.js 的高级库 ml5.js,使用户无需直接面对复杂的张量和优化器。

    TensorFlow.js 运行在浏览器中,支持移动设备和桌面设备。如果你的浏览器支持 WebGL 着色器 API,TensorFlow.js 就可以使用它们并利用 GPU 计算能力,带来相比 CPU 后端多达 100 倍的加速效果。在配备 GPU 的计算机上,TensorFlow.js 演示在浏览器中运行得非常快。

    在 Node.js 上,TensorFlow.js 可以使用已安装的 TensorFlow 版本作为后端,或者运行基本的 CPU 后端。CPU 后端是纯 JavaScript 的,并行优化不够充分。

    你可以在浏览器上运行官方 TensorFlow.js 模型、转换 Python 模型、使用迁移学习来用你自己的数据自定义模型,以及直接在 JavaScript 中构建和训练模型。

    TensorFlow Lite

    TensorFlow Lite是一个用于设备上推断的开源深度学习框架。它目前为 iOS、ARM64 和树莓派构建了模型。

    TensorFlow Lite 的两大组件分别是解释器和转换器。解释器用来在许多不同的硬件类型上运行特别针对优化的模型。转换器则将 TensorFlow 模型转换为高效形式供解释器使用,并可引入优化以改善程序体积和性能。预先训练的模型有图像分类、对象检测、智能回复、姿势估计和语义分割等类型。还有用于手势识别、图像分类、对象检测和语音识别的示例应用。

    TensorFlow Extended

    TensorFlow Extended(TFX))是用于部署机器学习生产流水线的端到端平台。你训练好一个模型就要考虑使用 TFX 了。其流水线包括数据验证、功能设计、建模、模型评估、服务推断以及在线平台、移动原生平台和 JavaScript 平台的部署管理。下图显示了 TFX 流水线的组件是如何组合在一起的。


    Swift for TensorFlow

    Swift for TensorFlow 是一个用于深度学习和可微分编程的下一代(并且仍不稳定)平台。它有一个用于训练的高级 API,看起来很像 Python TensorFlow,但它也支持使用 @differentiable 属性自动微分构建到 Swift 编译器的一个 fork 中。Swift for TensorFlow 可以导入和调用 Python 代码,使开发者更容易从 Python TensorFlow 过渡过来。

    TensorFlow 工具

    目前有七种工具支持 TensorFlow 。它们分别是 TensorBoard,TensorFlow 图的一组可视化工具;TensorFlow Playground,一个可调节的在线神经网络;CoLab,又名 Colaboratory,一个免费的在线 Jupyter 笔记本环境;What-If 工具,可用于探索和调试 TensorBoard、CoLab 或 Jupyter 笔记本中的模型;ML Perf,流行的机器学习基准测试套件;XLA(加速线性代数),一种用于线性代数的特定领域编译器,可优化 TensorFlow 计算;和 TFRC(TensorFlow 研究云),一个由 1000 多个云 TPU 组成的集群,研究人员可以申请免费使用。

    总的来说,TensorFlow 2.0 测试版已经在很多方面取得了很大进展。在 tf.keras API 和 Eager Execution 模式的帮助下,新版核心框架更易于学习、使用和调试。你可以有选择地将要编译的函数标记为图形。有五种方法可以进行分布式训练和推断。

    相关文章

      网友评论

        本文标题:Tensorflow 2.0 到底好在哪里?

        本文链接:https://www.haomeiwen.com/subject/ukmodctx.html