HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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:009328

评论

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

关于 NGINX Kubernetes Gateway,你需要知道的 5 件事

NGINX开源社区

nginx NGINX Ingress Controller NGINX Kubernetes Gateway 企业号 2 月 PK 榜

打通对账的最后一公里——对账管理平台

元年技术洞察

数字化转型 对账 对账系统 方舟平台

Flomesh Ingress 使用实践(一)基础功能

Flomesh

负载均衡 API ingress Pipy

2023年主流混合云管理平台排名榜单分享

行云管家

混合云 云管平台 云管理

上新啦|请查收StarRocks 2.5 LTS 版本特性介绍

StarRocks

数据库 大数据

不愧是阿里内部都在强力进阶学习springboot实战派文档,这细节讲解,神了!

架构师之道

Java 面试 架构师 springboot

StarRocks荣获2022年度最具潜力数据库奖

StarRocks

数据库 大数据

一文讲尽Thread类的源码精髓

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

java培训班怎样才能找到工作

小谷哥

前端培训中怎么提升技术水平?

小谷哥

云小课|创建DDS只读节点,轻松应对业务高峰

华为云开发者联盟

数据库 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

Apache Kafka入门级教程原创

宋小生

kafka Kafka Producer

TiDB x 阿里云丨最长 30 天,最高节省 ¥33,000,免费试用云数据库 TiDB 的机会来啦!

PingCAP

TiDB

云原生数据库如何设计运维系统?

Greptime 格睿科技

数据库 运维 云原生

服务器双机热备软件是什么?有什么作用?有哪些?

行云管家

高可用 服务器 双机热备 服务器双机热备

2013年的技术方向

且行且珍惜

2023计划

泛娱乐社交出海解决方案技术实践

网易云信

即时通讯IM 音视频技术

一种基于图片搜索视频的方案

京东科技开发者

搜索 视频 图像 企业号 2 月 PK 榜 商品搜索

如何快速完成API设计,mock数据给到前端?

不想敲代码

APi设计 apipost API调试

泛娱乐社交出海解决方案技术实践

网易智企

即时通讯IM 音视频通话

JavaScript使用URL用来解析处理URL

ModStart

便捷模型迭代优化,算法模型支持更新到已部署服务、已有项目|ModelWhale 版本更新

ModelWhale

人工智能 机器学习 数据分析 团队协同 编程建模

探讨:30岁转行入IT,晚吗

MavenTalker

转型 职业发展 职业道路 个人思考

云原生场景下实现编译加速

京东科技开发者

Java golang 缓存 编译 企业号 2 月 PK 榜

为什么你该试试 Sccache?

Databend

八股文的天花板,没到35k的Java开发都值得好好读一读

程序知音

java面试 后端技术 八股文 Java面试八股文 Java构架师

一文带你掌握物联网Mqtt网关搭建背后的技术原理

华为云开发者联盟

后端 物联网 华为云 企业号 2 月 PK 榜 华为云开发者联盟

对话 BitSail Contributor | 梁奋杰:保持耐心,享受创造

字节跳动数据平台

GitHub 开源 数据引擎

零基础转行大数据,学习应该注意什么?

小谷哥

学术加油站|HIST,面向海量数据的学习型多维直方图

OceanBase 数据库

数据库 oceanbase

前端编程培训学习好就业吗?

小谷哥

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