TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了

8 月中旬,谷歌大脑成员 Martin Wicke 在一封公开邮件中宣布,新版本开源框架——TensorFlow 2.0 预览版将在年底之前正式发布。今日,在上海谷歌开发者大会上,机器之心独家了解到一个重大的改变将会把 Eager Execution 变为 TensorFlow 默认的执行模式。这意味着 TensorFlow 如同 PyTorch 那样,由编写静态计算图全面转向了动态计算图。

谷歌开发者大会

在谷歌开发者大会的第二天,主会场全天都将进行 TensorFlow 专场的演讲。

来自 Google Brain 的软件工程师冯亦菲在分享 TensorFlow 编程接口的新动态时着重介绍了 tf.keras,tf.data 等高层库,总结了 TensorFlow 团队对开发者使用 TensorFlow 的一系列建议,包括:

  • 用 Eager 模式搭建原型

  • 用 Datasets 处理数据

  • 用 Feature Columns 提取特征

  • 用 Keras 搭建模型

  • 借用 Canned Estimators

  • 用 SavedModel 打包模型

其中,在介绍 Eager 模式时,她提到,在 TensorFlow 2.0 版本中,Eager 模式会成为默认执行模式,让开发者更简洁高效地搭建原型。

在演讲结束后的交流中,冯亦菲提到 TensorFlow 2.0 beta 版将会在今年年底公开,而正式版预计于明年 Q1 或 Q2 问世。Eager 模式变为默认设置之后,开发者可以在原型搭建完成后,利用 AutoGraph 把在 Eager 模式下搭建的模型自动变成计算图。开发者也可以进一步对 AutoGraph 生成的计算图进行优化,或者关掉 Eager 模式自己构建计算图。

我们注意到,在两个月之前刚刚发布的 AutoGraph 已经离开 tf.contrib 成为了正式的 TF 库的一部分,在设计文档中,工程师提到,「为了 TF 2.0 做准备,我们将 AutoGraph 从 tensorflow / contrib / autograph 移动到了 tensorflow / python / autograph。AutoGraph 仍可在 tensorflow.contrib.autograph 下访问,直到 tensorflow.contrib 被取消。」

谷歌开发者大会的「熟面孔」,Google AI 软件工程师金安娜同样出现在了今年的主题演讲中,她提到 TensorFlow 工程师会将自己的最新的设计提议放在 TensorFlow Community 的 Request for Comments 中,她鼓励开发者前往浏览,并针对工程师的最新设计思路给出自己的意见。

例如,Martin Wicke 关于 sunset tf.contrib 的提议就仍然在反馈阶段,有诸多开发者在该条 pull request 下提出了自己的意见。

RFC 的地址如下:

https://github.com/tensorflow/community/tree/master/rfcs

在今天下午的演讲中,会有更多来自谷歌的工程师分享与 Eager 模式相关的设计思路和设计细节。

TensorFlow 历程

TensorFlow 是由 Google Brain 团队在谷歌内部第一代 DL 系统 DistBelief 的基础上改进而得到的,这一通用计算框架目前已经成为最流行的机器学习开源工具。

TensorFlow 的前身 DistBelief 是谷歌 2011 年开发的内部 DL 工具,基于 DistBelief 的 Inception 网络获得了 2014 年的 ImageNet 挑战赛冠军。虽然 DistBelief 当时在谷歌内部已经应用于非常多的产品,但它过度依赖于谷歌内部的系统架构,因此很难对外开源。经过对 DistBelief 的改进与调整,谷歌于 2015 年 11 月正式发布了开源计算框架 TensorFlow 0.5.0。相比于 DistBelief,TensorFlow 的计算框架更加通用、计算资源安排更加合理,同时支持更多的深度学习算法与平台。

TensorFlow 开源后,基于 TF 的项目在第一年里面层出不穷:超过 480 人为 TF 做出了直接贡献,其中包括谷歌开发者、外部研究者、独立开发者、学生和其它公司的资深开发者。当时,TensorFlow 已经成为了 GitHub 上最受欢迎的机器学习项目。

在开源的第一年中,TensorFlow 增加了对分布式训练、iOS、树莓派开发板的支持,并且还与广泛使用的大数据架构相结合。此外,谷歌还发布了当时表现最好的图像分类模型 Inception-ResNet-v2,并且还回答了 GitHub、StackOverflow 和 TensorFlow mailing list 上数以千计的问题。

去年 2 月份在首届 TensorFlow 开发者大会中,谷歌正式发布了 TensorFlow 1.0。在速度上,它在 64 个 GPU 上分布式训练 Inception v3 获得了 58 倍提速。在灵活性上,TensorFlow 1.0 引入了高层 API,例如 tf.layers、tf.metrics 和 tf.losses 等模块,同时通过 tf.keras 将 Keras 库正式整合进 TF 中。

此后,TensorFlow 发布了非常多的重要更新,包括动态图机制 Eager Execution、移动端深度学习框架 TensorFlow Lite、面向 JavaScript 开发者的机器学习框架 TensorFlow.js,以及自动将 Python 转化为 TF 计算图的 AutoGraph 等。

TensorFlow 2.0 的规划中,Eager Execution 变为默认执行模式可能对开发者有比较大的影响,因为我们不再需要编写完整的静态计算图,并打开会话(Session)运行它。相反,与 PyTorch 一样,Eager Execution 是一个由运行定义的接口,这意味着我们在 Python 上调用它进行计算可以直接得出结果。这种方式非常符合人类直觉,因此可以预想 TensorFlow 的入门在以后会简单地多。

以下为 8 月中旬谷歌大脑成员 Martin Wicke 在公开邮件中透露的 TensorFlow 2.0 的规划

TensorFlow 2.0 的规划

自 2015 年开源发布以来,TensorFlow 已经成为世界上使用最广泛的机器学习框架,面向广泛的用户和用例。此后,TensorFlow 随着计算硬件、机器学习研究和商业部署的快速发展而不断更新。

为了反映这些快速变化,谷歌开发者已经开始研究下一个版本的 TensorFlow。TensorFlow 2.0 将是一个重要的里程碑,重点关注易用性。以下是用户对 TensorFlow 2.0 的一些期望:

  • Eager execution 将是 2.0 的核心功能。它把用户对编程模型的期望与 TensorFlow 实践更好地结合起来,应该会使 TensorFlow 更容易学习和应用。

  • 支持更多的平台和语言,并通过交换格式的标准化和 API 的对齐来改善这些组件之间的兼容性和对等性。

  • 将删除过时的 API 并减少重复,以免给用户带来困惑。

据邮件称,谷歌计划年底之前发布 TensorFlow 2.0 的预览版。

兼容性与连续性

TensorFlow 2.0 提供了一个纠错并改正的机会,而这些改进在语义版本控制中是不允许的。

为了简化转换,TensorFlow 团队将创建一个转换工具,该工具需要更新 Python 代码以使用与 TensorFlow 2.0 兼容的 API,或者在无法自动转换时发出警告。在向 1.0 过渡的过程中,类似的工具发挥了巨大的作用。

不是所有的改进都能自动进行。比如,TensorFlow 不赞成使用一些没有直接对接的 API。对于这种情况,我们将提供一个兼容模块 (tensorflow.compat.v1),其中包含完整的 TensorFlow 1.x API,它会在 TensorFlow 2.x 的周期里得到维护。

磁盘兼容性

谷歌表示,他们不打算对 SavedModels 或 GraphDef 存储进行重大更改,计划 2.0 中能包含所有当前内核。然而,2.0 的变化意味着在与新模型兼容之前,原始 checkpoint 中的变量名必须要进行转换。

tf.contrib

TensorFlow 的 contrib 模块已经超出了单个存储库可以维护和支持的范围。较大的项目最好分开维护,我们将把较小的扩展与 TensorFlow 主代码一起孵化。因此发布 TensorFlow2.0 之后,我们将停止发布 tf.contrib。在接下来的几个月里,我们将与 contrib 各自的所有者合作制定详细的迁移计划,包括如何在 TensorFlow 的社区页面和文档中宣传你的 TensorFlow 扩展。对于每一个 contrib 模块,我们有以下选择:a)将项目整合到 TensorFlow 中;b)将其移动到一个单独的存储库;c)将其彻底移除。这确实意味着所有的 tf.contrib 将被弃用,今天,TensorFlow 将停止添加新的 tf.contrib 项目。

入门TensorFlow
3
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

规划技术

人工智能领域的「规划」通常是指智能体执行的任务/动作的自动规划和调度,其目的是进行资源的优化。常见的规划方法包括经典规划(Classical Planning)、分层任务网络(HTN)和 logistics 规划。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

大数据技术技术

大数据,又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。

图网技术

ImageNet 是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库。

推荐文章
暂无评论
暂无评论~