TensorFlow 2.0发布在即,高级API变化抢先看

图0:TensorFlow 2.0发布在即,高级API变化抢先看

作者 | Sandeep Gupta, Josh Gordon, and Karmel Allison

整理 | 非主流、Jane

出品 | AI科技大本营

【导语】早在今年 8 月的时候,谷歌开源战略师 Edd Wilder-James 在一封公开邮件中表示正在研发 TensorFlow 2.0,并将于今年晚些时候发布预览版。在 2018 年最后半个月的日子里,我们就要迎来了新版本的发布。

在之前的公开邮件中,Edd Wilder-James 曾提到过一些 TensorFlow 2.0 的设计思想和重大改变:易用性将成为重点、Eager Execution 将会是核心功能、支持更多的平台和语言等。

而且未来所有的 tf.contrib 都会被弃用,对于每个 contrib 模块,要么 a)将项目集成到 TensorFlow 中;b)将其移至单独的存储库;c)完全将其移除。

在这篇文章中,我们将预览 TensorFlow 中高级 API 的未来方向,并回答大家常问的一些问题。

Keras 是广受开发者社区欢迎的高级 API,主要用于构建和训练深度学习模型。它可以用于快速原型设计、最先进的研究以及实际生产。虽然 TensorFlow 已经支持 Keras,但是 2.0 版本将实现更加紧密的集成。

Keras有以下几大关键优点:用户友好、模块化、可组合、容易扩展,既适合新手,也适合专家。这些优点加起来。可以让学习、研究、开发、部署的工作流更加容易,效率更高。通过将 Keras 构建为 TensorFlow 的高级 API,机器学习领域的新手可以更容易上手。通过单一的高级 API 可以减少混淆,让我们能够专注于为研究人员提供高级功能。

TensorFlow 2.0 版本发布在即。我们会先解答下大家比较关注的几个问题,然后我们会介绍 TensorFlow 2.0 中关于Keras 的一些新功能和重大变化,如Sequential API、Functional API、Model Subclassing API 与 Estimators 等。

FAQ

1、问:Keras 是否是一个独立的库?

答:其实,更应该把 Keras 视为一个 API。Keras 一直作为一个开源项目进行维护,大家可以在 (www.keras.io.)中找到。这个项目一直独立于 TensorFlow,并且拥有一个活跃的贡献者社区和用户社区。在 tf.keras 模块里,TensorFlow 有一个特定增强功能的完整 Keras API 实现。

2、问:Keras 只是 TensorFlow 或其他库的一个包装器吗?

答:不,这是一个常见的(但可以理解的)错误观念。 Keras 用于定义和训练机器学习模型的 API 标准,它与特定实现无关:除了 TensorFlow,Keras API 还可以用于 MXNet,TypeScript,JavaScript,CNTK,Theano,PlaidML,Scala,CoreML 和其他库的实现。

3、问:TensorFlow 内置的 Keras 版本与 keras.io 上的版本有什么区别?

答:TensorFlow 包含 Keras API(在 tf.kerasmodule 中)的实现,具有 TensorFlow 特定的增强功能,包括支持 Eager Execution,方便直观调试和快速迭代,支持 TensorFlow SavedModel模型交换格式,以及分布式训练(包括 TPU)。

当用到 tf.keras 模块的子类 API 时,Eager Execution 特别有用。这类 API 受到 Chainer 的启发,大家通过命令行就可以编写模型。tf.keras 与 TensorFlow 的生态系统紧密结合,可以支持:

  • tf.data 用于构建高性能的输入流。你可以用 Numpy 处理的数据来训练模型,或者用 tf.data 来衡量规模和性能。
  • 分布策略。在跨各种计算平台时进行分布式训练,包括分布在很多机器上的 GPU 和 TPU。
  • 输出模型。通过 tf.keras APIs 创建的模型可以在 TensorFlow SavedModel 格式下进行序列化,并且可以使用 TensorFlow Serving 或通过其他语言(Java、Go、Rust、C#等)进行绑定。
  • 模型可以使用 TensorFlow Lite 部署在移动或嵌入式设备上,也可以使用 TensorFlow.js。(也可以使用与此相同的 Keras API 直接在 JavaScript 中开发模型。)
  • 特征列,用于有效地表示和分类结构化数据。

如何安装 tf.keras?我是否需要先通过 pip 安装 Keras ?

因为 tf.keras 是包含在 TensorFlow 内的,所以,大家不用单独安装 Keras。如果在 Colab 中你可以直接运行下面的代码:

图1:TensorFlow 2.0发布在即,高级API变化抢先看

然后你就可以使用 tf.keras 了。如果你是安装新手,可以通过近期教程中的一些例子来检查是否导入成功。

5、TensorFlow 为专家和新手提供了不同 API,如何使用?

TensorFlow 的开发者们经验、层次都不同,有刚接触 ML 的学生们、也有 ML 领域的专家或研究者。而 TensorFlow 的一个优点就是它提供了不同的 APIs 支持不同的工作流和目标。这也是 TensorFlow 的 Keras 集成的一个主要目标,可以让用户选择对自己更有益处的部分,而无需采用 Keras 的整体框架。

Sequential API

如果你正在学习机器学习,我们 建议你从 tf.keras Sequential API 开始,它非常直观、简洁,适用于机器学习中 95% 的问题。使用这个 API,10 行代码就能搭建一个神经网络。

参考案例:

https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/_index.ipynb

图2:TensorFlow 2.0发布在即,高级API变化抢先看

定义模型的最常用方法是构建神经网络的层图,最简单的模型类型是把这些层堆叠起来。 你可以使用 Sequential API 来定义这样的模型,如下所示:

图3:TensorFlow 2.0发布在即,高级API变化抢先看

在 “Learn and UseML”章节下面,你可以找到更多使用 the Sequential API 的教程,参考链接:

https://www.tensorflow.org/tutorials/

图4:TensorFlow 2.0发布在即,高级API变化抢先看

Functional API

当然,顺序模型是一个简单的神经网络层堆栈,不能代表任何模型。不过,你可以使用 Functional API 来构建更高级的模型,定义复杂的拓扑结构,包括多输入和多输出模型,具有共享层的模型以及具有残差连接的模型。

使用 Functional API 构建模型时,神经层是可调用的,并可以返回张量作为输出。然后可以使用这些输入张量和输出张量来定义模型。 例如:

图5:TensorFlow 2.0发布在即,高级API变化抢先看

上面的模型同样可以使用简单的代码来进行编译和训练。

Model Subclassing API

如果你想搭建完全可自定义的模型,那么可以使用 Model Subclassing API。在类方法(class method)的主体中,你必须以这种方式定义前向传播。

图6:TensorFlow 2.0发布在即,高级API变化抢先看

这样的模型更灵活,但是也更难调试。所有这三种类型的模型三种类型的模型都可以使用前面显示的简单编译和调整命令来编译和训练,或者你可以编写自己的定制训练循环来实现完全控制。

例如:

图7:TensorFlow 2.0发布在即,高级API变化抢先看

更多 the Model Subclassing 的案例,可以在“research and experimentation”章节中查看教程,参考链接:

https://www.tensorflow.org/tutorials/

图8:TensorFlow 2.0发布在即,高级API变化抢先看

使用 the Model Subclassing API 实现的 Neural Machine Translation with Attention

图9:TensorFlow 2.0发布在即,高级API变化抢先看

使用 the Model Subclassing API实现的 GAN

如果这些模型都无法满足你的研究?

  • 如果你发现 tf.keras 限制了你的应用领域,你还有其他选择:

使用独立于 Keras 模型定义的 tf.keras 神经层,并编写自己的梯度和训练代码。类似地,你可以单独使用tf.keras.optimizers,tf.keras.initializers,tf.keras.losses或tf.keras.metrics。

  • 同时,你也可以完全忽略 tf.keras,使用较低层级的 TensorFlow,Python 和 AutoGraph 来获得你想要的结果。

这完全取决于你!请注意,tf.layers 中的非面向对象层将被弃用,tf.contribution(包括高级API,如 tf.contribution.slim 和 tf.contribution.learn)在 TF 2.0 中将不可用。

Estimators会发生哪些变化?

Estimator 在 Google 和 TensorFlow 社区的应用都十分广泛。 我们已经将几种模型打包为 Premade Estimators,包括线性分类器,DNN 分类器,组合 DNN 线性分类器(又名 宽深模型)和梯度增强树。 这些模型已经投入生产并得到广泛部署,由于这些原因,包括 Premade Estimators 在内的Estimator API 将包含在 TensorFlow 2.0 中。

对于 Premade Estimators 的用户来说,Keras 和 Eager Execution 焦点变化带来的的影响将是微乎其微的。我们可能会更改 Premade Estimators 的实现,同时保持 API 的界面相同。我们还将努力添加作为 Premade Estimators 实现的模型的 Keras 版本,并扩展 Keras 以更好地满足大规模生产的要求。

也就是说,如果你正在开发自定义体系结构,那我们建议使用 tf.keras 来构建模型而不是Estimator。如果你正在构建需要用到 Estimators 的基础架构,那么可以使用model_to_estimator() 来转换模型,同时我们也努力确保Keras可以跨TensorFlow生态系统工作。

进击到TensorFlow 2.0!

希望大家可以和我们一样喜欢使用 tf.keras 。在接下来几个月的时间,TensorFlow 团队将关注于提升开发者们的体验。在我们的文档和教程里也将会体现这点。我们也期待您的想法和反馈,并通过 Github issues 和 PRs 为项目作出贡献。感谢大家!

社区资源:

https://www.tensorflow.org/community/

原文链接:

https://medium.com/tensorflow/standardizing-on-keras-guidance-on-high-level-apis-in-tensorflow-2-0-bad2b04c819a

余下全文(1/3)
分享这篇文章:

请关注我们:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注