如何使用Python编写Tensorflow来组合层?
可以通过定义一个继承自’ResnetIdentityBlock’的类来使用Tensorflow组合层,从而定义可以组合层级的块。
更多Python相关文章,请阅读:Python 教程
至少包含一个层的神经网络称为卷积层。
TensorFlow Hub是一个包含预先训练的TensorFlow模型的存储库。 我们将学习如何使用来自TensorFlow Hub的模型,如何使用来自TensorFlow Hub的图像分类模型,以及如何通过使用预训练的分类器模型来对自定义图像类进行微调。这可以在不需要任何训练的情况下完成。
我们使用Google Colaboratory来运行下面的代码。Google Colab或Colaboratory可以帮助您在浏览器上运行Python代码,不需要进行任何配置,并且可免费访问GPU(图形处理单元)。Colaboratory是基于Jupyter Notebook构建的。
示例
print("组合层")
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("图层被称为")
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
输出
分层
该层称为
模型:“resnet_identity_block”
________________________________________________________________
层(类型) 输出形状 参数 #
================================================= ===============
conv2d(Conv2D) 多个 4
_________________________________________________________________
batch_normalization(批量多个 4
_________________________________________________________________
conv2d_1(Conv2D) 多个 4
_________________________________________________________________
batch_normalization_1(批次多个 8
_________________________________________________________________
conv2d_2(Conv2D) 多个 9
_________________________________________________________________
batch_normalization_2(批量多个 12
================================================= ===============
总共的参数:41
可训练的参数:29
不可训练的参数:12
解释
-
Resnet中的每个残差块都由卷积,批量正常化和快捷方式组成。
-
层可以嵌套在其他层中。
-
当我们需要模型方法(如Model.fit,Model.evaluate和Model.save)时,可以从keras.Model继承。
-
使用keras.Model而不是keras.layers.Layer有助于跟踪变量。
-
keras.Model跟踪其内部层,从而更容易检查这些层。