生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

Tensorflow 2.0 到底好在哪里?

  • 2019-08-03
  • 本文字数:5032 字

    阅读完需:约 17 分钟

Tensorflow 2.0到底好在哪里?


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


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


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


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


TensorFlow 2.0 有四大组成部分:


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

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

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

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



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


在以前的文章中,我曾评测过 TensorFlow r0.10(2016)(https://www.infoworld.com/article/3127397/review-tensorflow-shines-a-light-on-deep-learning.html)和 TensorFlow 1.5(2018)(https://www.infoworld.com/article/3250165/tensorflow-review-the-best-deep-learning-library-gets-better.html)。


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


TensorFlow 的竞争对手包括 Keras(可能使用除 TensorFlow 之外的其他后端)(https://www.infoworld.com/article/3305058/review-keras-sails-through-deep-learning.html)、MXNet(https://www.infoworld.com/article/3318557/review-mxnet-deep-learning-shines-with-gluon.html)(与 Gluon,https://www.infoworld.com/article/3318557/review-mxnet-deep-learning-shines-with-gluon.html)、PyTorch(https://www.infoworld.com/article/3289633/pytorch-review-a-deep-learning-framework-built-for-speed.html)、Scikit-learn(https://www.infoworld.com/article/3158509/review-scikit-learn-shines-for-simpler-machine-learning.html)和 Spark MLlib(https://www.infoworld.com/article/3141605/review-spark-lights-up-machine-learning.html)。最后两个主要是机器学习框架,缺乏深度学习的相关设施。


你可以同时使用多种方案。在单条流水线中同时使用多个框架是非常合理的,例如使用 Scikit-learn 准备数据并使用 TensorFlow 训练模型。

TensorFlow 核心

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

Eager Execution

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


$ python...>>> import tensorflow as tf>>> hello = tf.constant('Hello, TensorFlow!')>>> sess = tf.Session()>>> print(sess.run(hello))Hello, TensorFlow!>>> a = tf.constant(10)>>> b = tf.constant(32)>>> print(sess.run(a + b))42>>> exit()
复制代码


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


(上图最后一段:)Eager Execution改变了Tensorflow的运行机制——现在它立即给出运算并返给Python结果。tf.Tensor对象引用了具体的值提供给计算图中的节点,替换了符号句柄。因此在会话中不用使用先建立后运行的计算图了,使用print()或调试器查看结果更容易。计算、打印和检查张量值不会影响梯度计算。


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

tf.keras

前面的两个示例都使用了底层 TensorFlow API。“活用 TensorFlow 2.0 指南”(https://www.tensorflow.org/beta/guide/effective_tf2)则使用了高级别的 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 的过渡(https://github.com/orgs/tensorflow/projects/4)还在进行中,如下面的截图所示。目前有两个待办事项、23 个正在进行的任务以及 34 个已完成的任务。正在进行的任务中既有完全没有进展的(可能是因为当事人退出),也有几乎完成的(代码已进入存储库主分支,但尚未经过审查和部署)。



从 TensorFlow 1.14 到 TensorFlow 2.0 的过渡状态可通过以下网址跟踪:https://github.com/orgs/tensorflow/project/4。此截图生成于 6 月 21 日,但请注意该页面自 4 月 17 日以来都未更新。

将模型升级到 TensorFlow 2.0

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

使用 tf.function

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


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

分布式训练

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



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

TensorFlow.js

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


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


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


你可以在浏览器上运行官方 TensorFlow.js 模型(https://www.tensorflow.org/js/models/)、转换 Python 模型(https://www.tensorflow.org/js/tutorials#convert_pretained_models_to_tensorflowjs)、使用迁移学习来用你自己的数据自定义模型(https://www.tensorflow.org/js/tutorials/transfer/what_is_transfer_learning),以及直接在 JavaScript 中构建和训练模型(https://www.tensorflow.org/js/tutorials)。

TensorFlow Lite

TensorFlow Lite(https://www.tensorflow.org/lite/)是一个用于设备上推断的开源深度学习框架。它目前为 iOS、ARM64 和树莓派构建了模型。


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

TensorFlow Extended

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



TensorFlow Extended 示意图。

Swift for TensorFlow

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

TensorFlow 工具

目前有七种工具支持 TensorFlow(https://www.tensorflow.org/resources/tools)。它们分别是 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 模式的帮助下,新版核心框架更易于学习、使用和调试。你可以有选择地将要编译的函数标记为图形。有五种方法可以进行分布式训练和推断。


新版有一套完整的组件,也就是 TFX,用于构建从数据验证到推断模型管理的全套机器学习流水线。你可以在浏览器或 Node.js 上运行 TensorFlow.js,还可以在移动设备和嵌入式设备上运行 TensorFlow Lite。最后,Swift for TensorFlow 将为模型构建开辟新的可能性。


原文链接https://www.infoworld.com/article/3405641/tensorflow-2-review-easier-end-to-end-machine-learning.html


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-08-03 09:009236

评论

发布
暂无评论
发现更多内容

代码安全与质量 | 在这个充满变数的时代,花小钱办大事

龙智—DevSecOps解决方案

代码质量 代码安全检测 代码安全 安全防护

【MindStudio训练营第一季】MindStudio Profiling随笔

Angel Wings

华为 AI 调优 MindStudio Ascend

【MindStudio训练营第一季】MindStudio 高精度对比随笔

Angel Wings

MindStudio

手机银行APP评测系列:天津银行持续优化手机银行用户体验,但仍需加强细节提升

易观分析

手机银行 用户

通过认证|龙智正式成为Atlassian云专业伙伴

龙智—DevSecOps解决方案

云原生

觅健牵手博鳌医院战略合作:即时优享全球肿瘤创新治疗方案

联营汇聚

HummerRisk 入门3:开发手册

HummerCloud

云安全 云原生安全 12月月更

2023来袭,分享500道我收集的Java架构面试题

钟奕礼

Java 程序员 java面试 java编程

【MindStudio训练营第一季】MindStudio 可视化AI应用开发体验随笔

Angel Wings

MindStudio

隐藏复杂、抽象概念,「技术无感化」 ——The Future of Database2022 | 黄东旭新番

B Impact

连阿里P8都赞不绝口的“分布式架构原理设计笔记”到底有多牛

小小怪下士

Java 程序员 分布式 架构设计

亚马逊CTO Werner Vogels 演讲Keynote:世界一直无序地运转向前 @AWS re:Invent 2022

B Impact

实时数据赋能制造业产能升级:详解半导体和汽车制造行业最佳实践(活动报名)

tapdata

制造业 数据集成 汽车制造 实时数据 半导体行业

神秘新品即将来袭!大上科技开启护眼新未来倒计时

硬科技星球

金融信创正当时!看这家银行如何实现数据仓库与营销平台国产替换?

索信达控股

数据库 银行 数据库迁移 智能营销

可观测性神器之Micrometer

宋小生

监控 可观测性 micrometer

2022年第三季度汽车品牌智能网联竞争力指数(ICVCI)分析

易观分析

汽车 易观分析 智能网联

从今天起真正释放创造力 | Werner Vogels 在 re:Invent 2022带来多项开发者福音

亚马逊云科技 (Amazon Web Services)

亚马逊云科技

一个月面试了3家大厂Java岗,我发现这几个突破点

钟奕礼

Java 程序员 java面试 java编程

软件测试 | 测试核心:如何减少线上故障?

测试人

软件测试 软件质量 自动化测试 测试开发

版本控制 | 一文了解什么是组件化开发,以及如何从单体架构转向组件化开发

龙智—DevSecOps解决方案

组件化 组件化开发

如何设计业务异地多活架构 - week7

in9

听软件测试自动化“领导者”讲解如何降本、增效与提质

龙智—DevSecOps解决方案

测试 自动化测试 测试自动化

世界杯太精彩了,带大家用Python做个足球游戏,边玩游戏边看比赛

Lansonli

Python游戏 Python足球游戏 世界杯足球游戏

36kr企服点评启发:“信任的基础是真实,只要做到真实,一定能够建立起双向信任”

B Impact

【MindStudio训练营第一季】MindStudio 专家系统随笔

Angel Wings

mindspore MindStudio

信息安全等级保护的5个级别分别是什么?最高级别是哪个?

行云管家

等保 等级保护

面试官:你先回去等通知吧!这个Java岗位我还有机会吗?

钟奕礼

Java java面试 java编程 程序员、

React 之 Refs 的使用和 forwardRef 的源码解读

冴羽

JavaScript react.js 前端 前端框架 React

双机互备是什么意思?双机互备就是双机热备吗?

行云管家

双机热备 双机互备

为什么我们不支持手工上传镜像

Jianmu

Docker 容器 镜像

Tensorflow 2.0到底好在哪里?_AICon_Martin Heller_InfoQ精选文章