如何使用 Python 在 Tensorflow 中组合层?


Tensorflow 可以通过定义一个继承自 'ResnetIdentityBlock' 的类来组合层。这用于定义一个块,该块可用于组合层。

阅读更多: 什么是 TensorFlow 以及 Keras 如何与 TensorFlow 协同工作以创建神经网络?

包含至少一层的神经网络称为卷积层。我们可以使用卷积神经网络构建学习模型。

TensorFlow Hub 是一个包含预训练 TensorFlow 模型的存储库。 TensorFlow 可用于微调学习模型。 我们将了解如何使用 TensorFlow Hub 中的模型与 tf.keras,使用 TensorFlow Hub 中的图像分类模型。完成此操作后,可以执行迁移学习以针对自定义图像类别微调模型。这是通过使用预训练的分类器模型来获取图像并预测它是做什么的来完成的。这可以在不需要任何训练的情况下完成。

我们正在使用 Google Colaboratory 来运行以下代码。Google Colab 或 Colaboratory 帮助通过浏览器运行 Python 代码,并且无需任何配置即可免费访问 GPU(图形处理单元)。Colaboratory 建立在 Jupyter Notebook 之上。

示例

print("Composing layers")
class ResnetIdentityBlock(tf.keras.Model):
   def __init__(self, kernel_size, filters):
      super(ResnetIdentityBlock, self).__init__(name='')
      filters1, filters2, filters3 = filters
      self.conv2a = tf.keras.layers.Conv2D(filters1, (1, 1))
      self.bn2a = tf.keras.layers.BatchNormalization()
      self.conv2b = tf.keras.layers.Conv2D(filters2, kernel_size, padding='same')
      self.bn2b = tf.keras.layers.BatchNormalization()
      self.conv2c = tf.keras.layers.Conv2D(filters3, (1, 1))
      self.bn2c = tf.keras.layers.BatchNormalization()
   def call(self, input_tensor, training=False):
      x = self.conv2a(input_tensor)
      x = self.bn2a(x, training=training)
      x = tf.nn.relu(x)
      x = self.conv2b(x)
      x = self.bn2b(x, training=training)
      x = tf.nn.relu(x)
      x = self.conv2c(x)
      x = self.bn2c(x, training=training)
      x += input_tensor
      return tf.nn.relu(x)
print("The layer is called")
block = ResnetIdentityBlock(1, [1, 2, 3])
_ = block(tf.zeros([1, 2, 3, 3]))
block.layers
len(block.variables)
block.summary()

代码来源 - https://tensorflowcn.cn/tutorials/customization/custom_layers

输出

Composing layers
The layer is called
Model: "resnet_identity_block"
_________________________________________________________________
Layer (type)        Output Shape      Param #
=================================================================
conv2d (Conv2D)       multiple          4
_________________________________________________________________
batch_normalization (BatchNo multiple   4
_________________________________________________________________
conv2d_1 (Conv2D)      multiple        4
_________________________________________________________________
batch_normalization_1 (Batch multiple  8
_________________________________________________________________
conv2d_2 (Conv2D)     multiple         9
_________________________________________________________________
batch_normalization_2 (Batch multiple  12
=================================================================
Total params: 41
Trainable params: 29
Non-trainable params: 12

解释

  • resnet 中的每个残差块都由卷积、批处理归一化和快捷方式组成。

  • 层也可以嵌套在其他层中。

  • 当我们需要模型方法(例如 Model.fit、Model.evaluate 和 Model.save)时,可以从 keras.Model 继承。

  • keras.Model 用于代替 keras.layers.Layer,这有助于跟踪变量。

  • keras.Model 会跟踪其内部层,从而更容易检查这些层。

更新于: 2021年2月25日

182 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告