动态 | TensorFlow 2.0 新特性来啦,部分模型、库和 API 已经可以使用

2019-11-01 12:22:12 浏览数 (1)

AI 科技评论按:虽然 TensorFlow 2.0 还没有正式发布,但日前,TensorFlow 团队发布一篇文章,宣布了 TensorFlow 2.0 里面将会有的新变化,雷锋网 AI 科技评论编译整理如下:

由于令人难以置信的多样化社区,TensorFlow 已经发展成为世界上最受欢迎和广泛采用的 ML 平台之一。这个社区包括:

  • 研究人员(例如,预测地震余震和检测乳腺癌)
  • 开发人员(例如,开发应用程序以识别患病植物和帮助人们减肥)
  • 公司(例如,通过 eBay、Dropbox 和 AirBnB 改善客户体验)
  • 其它

去年 11 月,TensorFlow 庆祝了它的第三个生日,并回顾了这些年来增加的功能。我们很高兴迎来了另一个重要的里程碑:TensorFlow2.0。

TensorFlow 2.0 将重点放在简单和易用性上,它做了以下更新:

  • 用 Keras 建立简单的模型并执行
  • 在任何平台上的生产中进行强大的模型部署
  • 强大的研究实验
  • 通过清除不推荐使用的 API 和减少重复来简化 API

在过去的几年中,我们在 TensorFlow 中添加了许多组件。在 TensorFlow 2.0 中,这些组件将被打包成一个综合性平台,支持从训练到部署的机器学习工作流。让我们用一张简化的概念图来看看 TensorFlow2.0 的新架构,如下所示:

注意:尽管本图的训练部分侧重于 Python API,但 TensorFlow.js(https://js.tensorflow.org/) 也支持训练模型。它不同程度地支持其它语言,这些语言包括:Swift、R 和 Julia。

简单的模型构建

在最近的一篇博文(https://medium.com/tensorflow/standardizing-on-keras-guidance-on-high-level-apis-in-tensorflow-2-0-bad2b04c819a)中,我们宣布,用于机器学习的用户友好的 API 标准 Keras (https://www.tensorflow.org/guide/keras)将成为用于构建和训练模型的主要高级 API。Keras API 使得使用 TensorFlow 变得容易。重要的是,Keras 提供了几个模型构建 API,因此您可以为项目选择正确的抽象级别。TensorFlow 的实现包含一些增强功能,包括用于即时迭代和直观调试的功能等。

下面是一个工作流示例(在接下来的几个月里,我们将努力更新下面链接的指南):

  1. 使用 tf.data 加载数据。使用 tf.data 创建的输入管道读取训练数据。还支持从内存(例如 Numpy)方便地输入数据。
  2. 使用 tf.keras 构建、训练和验证您的模型,或者使用 Premade Estimators 来验证您的模型。Keras 与 TensorFlow 的其余部分紧密集成,因此您可以随时使用 TensorFlow 的功能。一组标准的打包模型(例如线性回归、逻辑回归、随机森林)也可以直接使用(使用 tf.estimator API 实现)。如果您不想从头开始训练一个模型,您很快就能使用迁移学习来训练一个使用TensorFlowHub 模块的 Keras 或 Estimator 模型。
  3. 使用 eager execution 运行和调试,然后使用 tf.function。TensorFlow 2.0 在默认情况下运行时有很强的执行能力。此外,tf.function 注释会将 python 程序转换为 TensorFlow 图。这个过程保留了基于 1.x TensorFlow 执行的所有优点:性能优化、远程执行以及易于序列化、导出和部署的能力。
  4. 使用分发策略进行分发训练。对于大型 ML 训练任务,分发策略 API 使在不更改模型定义的情况下,可以轻松地在不同的硬件配置上分发和训练模型。由于 TensorFlow 支持一系列硬件加速器,如 CPU、GPU 和 TPU,因此您可以将训练工作量分配到单节点/多加速器以及多节点/多加速器配置,包括 TPU Pods。
  5. 导出到 SavedModel。TensorFlow 将在 SavedModel 上作为 TensorFlow 服务、TensorFlow Lite、TensorFlow.js、TensorFlow Hub 等的交换格式进行标准化。

在任何平台上的生产中进行强大的模型部署

一直以来,TensorFlow 为生产提供了直接途径。无论是在服务器、边缘设备还是网络上,使用何种语言或平台,TensorFlow 都可以让您轻松地训练和部署模型。在 TensorFlow 2.0 中,我们通过标准化交换格式和调整 API 来改进平台和组件之间的兼容性和奇偶性。

一旦您训练并保存了模型,就可以直接在应用程序中执行它,或者使用部署库为其提供服务:

  • TensorFlow 服务(https://www.tensorflow.org/tfx/serving/):允许模型通过 HTTP/REST 或 GRPC/协议缓冲区提供服务的 TensorFlow 库。
  • TensorFlow Lite(https://www.tensorflow.org/mobile/tflite/):TensorFlow 针对移动和嵌入式设备的轻量级解决方案提供了在 Android、iOS 和嵌入式系统上部署模型的能力。
  • tensorflow.js:支持在 JavaScript 环境中部署模型,例如在 Web 浏览器或服务器端通过 Node.js 部署模型。TensorFlow.js 还支持在 JavaScript 中定义模型,并使用类似于 KERA 的 API 直接在 Web 浏览器中进行训练。

TensorFlow 还支持其他语言(一些由更广泛的社区维护),包括 C、Java、Go、C#、Rust、Julia、R 等。

强大的研究实验

TensorFlow 2.0 包含了许多功能,可以在不牺牲速度或性能的情况下定义和训练最先进的模型:

  • Keras 功能 API 和 Model Subclassing API:允许创建复杂的拓扑结构,包括使用剩余层、自定义多输入/输出模型和前向迭代。
  • 自定义训练逻辑:使用 tf.GradientTape 和 tf.custom_gradient 对梯度计算进行细粒度控制。
  • 为了实现更大的灵活性和更好的控制性,低级 TensorFlow API 始终可用,并通常与高级抽象 API 结合使用,以实现完全可定制的逻辑。

TensorFlow 2.0 带来了一些新的补充,允许研究人员和高级用户使用丰富的扩展进行实验,如 Ragged Tensors、TensorFlow Probability、Tensor2Tensor 以及更多有待公布的内容。

TensorFlow 1.x 和 2.0 之间的差异

以下是一些更大的变化:

  • 删除支持 tf.data 的队列运行程序
  • 移除图集合
  • 变量处理方式的更改
  • API 符号的移动和重命名

此外,tf.contrib 将从核心 TensorFlow 存储库和构建过程中删除(https://github.com/tensorflow/community/pull/18)。TensorFlow 的 contrib 模块已经超出了在单个存储库中可以维护和支持的范围。较大的项目单独维护会更好,而较小的扩展将整合到核心 TensorFlow 代码。

兼容性和连续性

为了简化代码迁移到 TensorFlow 2.0 的过程,将有一个转换工具,它可以更新 TensorFlow 1.x Python 代码以使用与 TensorFlow 2.0 兼容的 API,并将无法自动转换的代码标记出来。

此外,SavedModel 和 GraphDef 将向后兼容。用 1.x 版本保存的 SavedModel 格式的模型将继续在 2.x 版本中加载和执行。但是,2.0 版本中的变更将意味着原始检查点中的变量名可能会更改,因此使用 2.0 版本之前的检查点(代码已转换为 2.0 版本)并不保证能正常工作。有关详细信息,请参阅 TensorFlow 2.0 指南。

TensorFlow 2.0 的时间线

TensorFlow 2.0 将于今年年初公开发布。但为什么要等到那个时候?您已经可以使用 tf.keras 和 Eager execution、预打包模型和部署库来开发 TensorFlow2.0 方法。今天,部分分发策略 API 也已经可用。

我们对 TensorFlow2.0 和它即将带来的变化感到非常兴奋。TensorFlow 已经从一个用于深度学习的软件库成长为所有包括类型机器学习的整个生态系统。对所有平台上的所有用户来说,TensorFlow 2.0 将简单且易用。

0 人点赞