固定链接 如何用 TensorFlow 实现更好的结构化图层和模型

如何用 TensorFlow 实现更好的结构化图层和模型

如何用 TensorFlow 实现更好的结构化图层和模型

今天主要向大家介绍的内容是:自定义层

我们建议使用 tf.keras 作为构建神经网络的高级 API。也就是说,大多数 TensorFlow API 都可以通过 eager execution(即时执行)来使用:

层:常用的操作集

大多数情况下,在编写机器学习模型代码时,我们希望在比单个操作和操作单个变量更高的抽象级别上进行操作。

许多机器学习模型可以表达为相对简单的层的组合和堆叠,TensorFlow 提供了一组常见层作为一种简单的方法,您可以从头编写自己的特定于应用程序的层,或者将其作为现有层的组合。

TensorFlow 在 tf.keras 包中封装了完整的 Keras API,并在构建模型时 Keras 层和 Keras 包发挥着巨大的作用:

可以在文档中看到已存在层的完整列表。它包括 Dense(完全连接层),Conv2D,LSTM,BatchNormalization(批处理标准化),Dropout 等等:

实现自定义层

实现自定义层的最佳方法是扩展 tf.keras.Layer 类并实现:* __ init__ ,您可以在其中执行所有与输入无关的初始化 * build,您可以在其中了解输入张量的形状,并可以执行其余的初始化 * call,以及在此进行正演计算。

请注意,您不必等到调用 build 来创建变量,您还可以在 __ init__ 中创建变量。然而,在 build 中创建变量的优势在于它使后期的变量创建基于层将要操作的输入的形状。另一方面,在 __ init__ 中创建变量意味着需要明确指定创建变量所需的形状:

请注意,您不必等到调用 build 来创建变量,您还可以在 __ init__ 中创建变量。

尽可能使用标准层,则整体代码更易于阅读和维护,其他读者也将熟悉标准层的行为。如果你想使用 tf.keras.layers 或 tf.contrib.layers 中不存在的图层,请考虑提交一份 github 问题,或者更好的是,你可以提交一个 pull 请求。

模型:组合层

机器学习模型中许多有趣的类层事物都是通过组合现有的层来实现的。例如,resnet 中的每个剩余块都是卷积、批处理规范化和快捷方式的组合。

在创建包含其他图层的类似图层时使用的主类是 tf.keras.Model。其实现是通过继承 tf.keras.Model 来实现的:

然而,很多时候,由许多层组成的模型只是简单地调用一个接一个的层。这可以使用 tf.keras.Sequential 在非常少的代码中完成:

下一步

现在,您可以回到之前的笔记并调整线性回归示例,以使用更好的结构化图层和模型。

本文出自:Google TensorFlow 团队

原文链接:https://mp.weixin.qq.com/s/2pkVK9SO3k3V3vrmGezTlg

您的留言将激励我们越做越好