机器之心报道,做者:邱陆陆。python
8 月中旬,谷歌大脑成员 Martin Wicke 在一封公开邮件中宣布,新版本开源框架——TensorFlow 2.0 预览版将在年末以前正式发布。今日,在上海谷歌开发者大会上,机器之心独家了解到一个重大的改变将会把 Eager Execution 变为 TensorFlow 默认的执行模式。这意味着 TensorFlow 如同 PyTorch 那样,由编写静态计算图全面转向了动态计算图。git
谷歌开发者大会github
在谷歌开发者大会的次日,主会场全天都将进行 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 的地址以下:
在今天下午的演讲中,会有更多来自谷歌的工程师分享与 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 项目。