如何使用 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://www.tensorflow.org/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 跟踪其内部层,从而更容易检查层