选自Medium
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载
四天前,TensorFlow 2.0 预览版终于上线了,看来稳定版距离我们也不会太远——按照官方说法会是今年的第一个季度。近日, 官方博客全面介绍了 2.0 版的所有新特性。为了让开发者们简单高效地搭建模型,2.0 版本经过了大幅度重建。
作为最流行的深度学习框架,TensorFlow 已经成长为全球使用最广泛的机器学习平台。目前,TensorFlow 的开发者社区包括研究者、开发者和企业等。
去年 11 月,TensorFlow 庆祝了自己的三岁生日。不久之后,也将迎来另一个重要里程碑——TensorFlow 2.0。
TensorFlow 2.0 将专注于简洁性和易用性,主要升级方向包括:
- 使用 Keras 和 eager execution 轻松构建模型。
- 在任意平台上实现稳健的生产环境模型部署。
- 为研究提供强大的实验工具。
- 通过清理废弃的 API 和减少重复来简化 API。
谷歌表示,在过去几年里,TensorFlow 增加了很多组件。通过 TensorFlow 2.0 版本的大幅度重建,这些功能将被打包成为一个综合平台,支持从训练到部署的整个机器学习工作流程。下图简要展示了 TensorFlow 2.0 的新架构:
Note:虽然上图的训练部分侧重 Python API,但是 TensorFlow.js 也支持训练模型。TensorFlow 2.0 对其他语言也有不同程度的支持,包括 Swift、R 语言和 Julia。
轻松构建模型
TensorFlow 团队近期宣布 Keras API 将成为 TensorFlow 中构建和训练模型的核心高级 API。Keras API 使得使用 TensorFlow 开启项目变得简单。重要的是,Keras 提供多个模型构建 API(Sequential、Functional 和 Subclassing),这样你可以选择适合自己项目的抽象级别。TensorFlow 的实现有多项增强,包括可直接迭代和直观调试的 eager execution,以及用于构建可扩展输入流程的 tf.data。
以下是工作流程示例(在接下里的几个月中,我们将努力更新以下链接的指南):
- 用 tf.data 加载数据。用 tf.data 创建的输入线程读取训练数据。使用 tf.feature_column 描述特征特性,例如分段和特征交叉。还支持从内存数据(例如 NumPy)中方便地输入。
- 使用 tf.keras、Premade Estimators 构建、训练和验证模型。Keras 与 TensorFlow 的其余部分紧密集成,因此你可以随时访问 TensorFlow 的功能。一组标准的打包模型(例如,线性或逻辑回归、梯度增强树、随机森林)也可以直接使用(使用 tf.estimator API 实现)。如果你不想从头开始训练一个模型,你很快就能通过 TensorFlow Hub 的模块利用迁移学习来训练 Keras 或 Estimator 模型。
- 用 eager execution 运行和调试,然后在图形上使用 tf.function。TensorFlow 2.0 默认用 eager execution 运行,以便于轻松使用和顺利调试。此外,tf.function 注释透明地将 Python 程序转换成 TensorFlow 图。这个过程保留了 TensorFlow1.x 基于图形执行的所有优点:性能优化、远程执行,以及序列化、导出和部署的能力,同时增加了用简单 Python 表达程序的灵活性和易用性。
- 使用分布式策略进行分布式训练。对于大部分 ML 训练任务来说,Distribution Strategy API 使得在不同的硬件配置上分布和训练模型变得很容易,而无需改变模型定义。由于 TensorFlow 为一系列硬件加速器(如 CPU、GPU、TPU)提供支持,你可以将训练工作负载分配给单节点/多加速器以及多节点/多加速器配置,包括 TPU Pods。尽管这个 API 支持多种群集配置,但提供了在本地或云环境中的 Kubernete 集群上部署训练的模板。
- 导出至 SavedModel。TensorFlow 将在 SavedModel 上标准化,来作为 TentsorFlow Serving、TensorFlow Lite、TensorFlow.js、TentsorFlow Hub 等的交换格式。
在任意平台上实现稳健的生产环境模型部署
TensorFlow 总是会提供直接的产品化路径。不论是在服务器、边缘设备还是网页上,也不论你使用的是什么语言或平台,TensorFlow 总能让你轻易训练和部署模型。在 TensorFlow 2.0 中,我们正在通过标准化交换格式和调整 API 来改进跨平台和组件的兼容性和奇偶性(parity)。
- TensorFlow Serving:允许通过 HTTP/REST 或 gRPC /协议缓冲区为模型提供服务的 TensorFlow 库。
- TensorFlow Lite:TensorFlow 针对移动和嵌入式设备的轻量级解决方案提供了在 Android、iOS 和嵌入式系统(如 Raspberry Pi 和 Edge TPU)上部署模型的能力。
- TensorFlow.js:支持在 JavaScript 环境中部署模型,例如通过 Node.js. TensorFlow.js 在 web 浏览器或服务器端部署模型,还支持在 JavaScript 中定义模型和在 web 浏览器中使用类似 Keras 的 API 直接训练模型。
TensorFlow 还支持其它语言(由更广泛的社区维护),包括:C、Java、Go、C#、Rust、、R 等等。
为研究提供强大的实验工具
TensorFlow 使得从概念到代码和从模型到出版物中获取新想法变得更加容易。TensorFlow 2.0 结合了很多功能,能够在不牺牲速度或性能的情况下定义和训练最先进的模型:
- Keras Functional API 和 Model Subclassing API:允许创建复杂的拓扑,包括使用残差层、自定义多输入/输出模型以及强制编写的正向传递。
- 自定义训练逻辑:用 tf.GradientTape 和 tf.custom_gradient 对梯度计算进行细粒度控制。
- 为了获得更强的灵活性和控制,低级 TensorFlow API 始终可用,并与更高级别的抽象一起工作,以实现完全可定制的逻辑。
TensorFlow 2.0 新添了一些附加功能,让研究人员和高级用户可以使用丰富的插件来进行实验,如 Ragged Tensors、TensorFlow Probability、Tensor2Tensor 等。
除了这些功能之外,TensorFlow 还提供了易于制作原型和调试的 eager execution,可以大规模训练的 Distribution Strategy API 和 AutoGraph,以及对 TPU 的支持,使 TensorFlow 2.0 成为一个易于使用、可定制和高度可扩展的平台,用于展开最先进的 ML 研究并将该研究转化为生产流水线。
TensorFlow 1.x 和 2.0 的区别
自我们开源 TensorFlow 以来,到现在已经发展出很多个版本和 API 迭代。随着 ML 的快速发展,这个平台也有了巨大的进展,现在支持很多具有不同需求的不同用户。有了 TensorFlow 2.0,我们有机会基于语义版本控制来清理和模块化平台。
此次的重大改变包括:
- 删除 queue runner 以支持 tf.data。
- 删除图形集合。
- 变量处理方式的变化。
- API 符号的移动和重命名。
此外,tf.contrib 将从核心 TensorFlow 存储库和构建过程中移除。TensorFlow 的 contrib 模块已经超出了单个存储库可以维护和支持的范围。较大的项目最好单独维护,而较小的扩展将逐渐移至核心 TensorFlow 代码。一个特别兴趣小组(SIG)已经成立,以维持和进一步发展一些更重要的未来 contrib 项目。如果你有兴趣贡献,请联系以下 RFC:
https://github.com/tensorflow/community/pull/37
兼容性和持续性
为了简化向 TensorFlow 2.0 的过渡,将会有一个转化工具来更新 TensorFlow 1.x Python 代码,以使用 TensorFlow 2.0 兼容的 API,或标记代码无法自动转换的情况。
不是所有的变化都可以完全自动化进行。例如,一些被弃用的 API 没有直接的等效物。这也是我们要引入 tensorflow.compat.v1 兼容性模块的原因,该模块支持完整的 TensorFlow 1.x API(包括 tf.contrib)。该模块将会在 TensorFlow 2.x 的时间线内得到维护,并允许用 TensorFlow 1.x 编写的代码保持功能。
此外,SavedModels 或存储的 GraphDefs 将向后兼容。用 TensorFlow 1.x 保存的 SavedModels 将继续在 2.x 中加载和执行。然而,2.0 中的更改意味着原始检查点中的变量名可能会更改,所以使用 2.0 之前的检查点而代码已转化为 2.0 时,可能无法保证有效。详情可参阅 TensorFlow 2.0 指南:
https://github.com/tensorflow/docs/blob/master/site/en/r2/guide/effective_tf2.md
我们相信,TensorFlow 2.0 将为社区带来巨大的利益,我们也尽了最大的努力来让转化变得简单。但是,我们也发现迁移现在的线程需要时间,我们非常重视社区当下在学习和使用 TensorFlow 方面的投入。我们将在最近的 1.x 版本中提供 12 个月的安全补丁,以为现有的用户提供足够的时间来过渡和利用 TensorFlow 2.0。
TensorFlow 2.0 时间线
TensorFlow 2.0 于今年年初发布预览版。你现在已经可以通过使用 tf.keras 、eager execution、预打包模型和部署库来开发 TensorFlow 2.0 了。Distribution Strategy API 也已经部分可用。
原文链接:https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d3663832e9b8?linkId=62351082