写点什么

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


2019-08-03 09:009371

评论

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

openEuler委员会主席江大勇:跨越生态拐点 欧拉逐梦新征程

科技热闻

如何在等待页面制作加载动画

Towify

Apache APISIX 3.1.0 版本正式发布

API7.ai 技术团队

开源 api 网关 APISIX apache 社区

【web 开发基础】如何删除数组中的重复元素(52)

迷彩

数组 数组操作 PHP基础 唯一性

直播回顾 | 根因分析助力AIOps走得更远!

博睿数据

可观测性 智能运维 博睿数据

聚焦电商场景数字化转型升级,华为云大数据解决方案高效赋能

爱尚科技

着眼全局提升决策质量,华为云大数据BI让企业看见未来

爱尚科技

云网络运维必备神器:全链路故障诊断与分析

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜

“一粒米”的故事:哈工程昇智识米团队基于昇腾AI创新提出水稻适度加工智能化解决方案

Geek_2d6073

一文讲清「敏捷路线图」| Liga译文

LigaAI

Scrum 产品经理 敏捷开发 软件开发 12 月 PK 榜

接口自动化测试不想写代码?这款工具强烈推荐

不想敲代码

自动化测试 API 自动化测试平台

行云管家荣膺STIF第三届国际科创节 “2022年度数字化创新典范奖”

行云管家

信息安全 数字化 国际科创节

如何正确使用网格设置制作卡片类型展示页面

Towify

Mysql索引覆盖

京东科技开发者

MySQL 数据库 sql 搜索引擎 优化

零信任与 K8s 环境实践

HummerCloud

k8s 零信任 kubernetes 运维

HarmonyOS多媒体框架介绍

HarmonyOS开发者

HarmonyOS

工业数据分析为什么要用FusionInsight MRS IoTDB?

华为云开发者联盟

大数据 后端 华为云 工业数据 12 月 PK 榜

跳板攻击原理及如何追踪定位攻击者主机(下)

郑州埃文科技

IP地址 跳板攻击 攻击溯源

Liga妙谈 | 找准「话事人」,高效甄别和响应用户反馈

LigaAI

产品经理 敏捷开发 PO 产品负责人 12 月 PK 榜

时序数据库 TDengine 签约新奥新智

TDengine

数据库 tdengine 时序数据库

华为云大数据BI,企业数字化运营得力助手

爱尚科技

据+AI赋能教育智能化转型,华为云技术优势明显!

爱尚科技

为有状态应用而生,云原生本地存储Carina正式进入CNCF沙箱

BoCloud博云

云原生 本地存储 Carina

跳槽一次能涨多少?总算是见识到跳槽天花板了

程序知音

Java java面试 后端开发 八股文 Java面试题

理解iOS端的WebView同层组件

珲少

捷报频传 | Bonree ONE获2022科技赋能金融业场景金融建设突出贡献奖

博睿数据

可观测性 智能运维 博睿数据 ONE平台 荣誉奖项

智能制造 | AIRIOT智慧工厂管理解决方案

AIRIOT

物联网 智慧工厂 物联网系统搭建

DTT年度收官圆桌π,华为云8位技术专家的年末盘点

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜

等保四级适用于哪些领域?一年一次吗?

行云管家

等保 等级保护 等保四级

重磅!XTransfer荣登InfoQ【十大开发者最向往的高价值技术团队】榜单

XTransfer技术

有了华为云大数据BI,企业数字化转型该如何做?

爱尚科技

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