我们建议使用 tf.keras 作为构建神经网络的高级API,也就是说,大多数TensorFlow API都可用于Eager execution。
from __future__ import absolute_import, division, print_function, unicode_literalsimport tensorflow as tf
![27b8e8d6a8bcce281911967332cdf86a.gif](https://i-blog.csdnimg.cn/blog_migrate/165964a97f5974326936324a3a485860.gif)
1. 对图层的常用操作
在编写机器学习模型的代码时,大多数情况下,您希望以比单个操作和单个变量操作更高的抽象级别上进行操作。
许多机器学习模型都可以表示为相对简单的层的组合和叠加,TensorFlow提供了一组公共层和一种简单的方法,让您可以从头开始编写自己的特定于应用程序的层,也可以表示为现有层的组合。
TensorFlow在 tf.keras 中包含完整 Keras API,而Keras层在构建自己的模型时非常有用。
# 在tf.keras.layers包中,图层是对象。要构造一个图层,只需构造一个对象。 # 大多数层将输出维度/通道的数量作为第一个参数。 layer = tf.keras.layers.Dense(100)# 输入维度的数量通常是不必要的,因为它可以在第一次使用层时推断出来, # 但如果您想手动指定它,则可以提供它,这在某些复杂模型中很有用。 layer = tf.keras.layers.Dense(10, input_shape=(None, 5))
可以在文档(链接)中看到预先存在的层的完整列表,它包括Dense(完全连接层),Conv2D,LSTM,BatchNormalization,Dropout等等。
# 要使用图层,只需调用它即可。 layer(tf.zeros([10, 5]))# 层有许多有用的方法,例如,您可以使用 `layer.variables` 和可训练变量使用 # `layer.trainable_variables`检查图层中的所有变量,在这种情况下, # 完全连接的层将具有权重和偏差的变量。 print(layer.variables) # 变量也可以通过nice accessors访问print(layer.kernel, layer.bias)
2. 使用keras实现自定义层
实现自己的层的最佳方法是扩展tf.keras.Layer 类并实现:
- __init__ ,您可以在其中执行所有与输入无关的初始化
- build,您可以在其中了解输入张量的形状,并可以执行其余的初始化
- call,在那里进行正向计算。
请注意,您不必等到调用 build 来创建变量,您也可以在 __init__中创建它们。但是,在 build 中创建它们的好处是,它支持根据将要操作的层的输入形状,创建后期变量。另一方面,在 __init__ 中创建变量意味着需要明确指定创建变量所需的形状。
class MyDenseLayer(tf.keras.layers.Layer): def __init__(self, num_outputs): super(MyDenseLayer, self).__init__() self.num_outputs = num_outputs def build(self, input_shape): self.kernel = self.add_variable("kernel