详解Keras3.0 Models API: Model class
1、语法
keras.Model()
将不同层组为具有训练/推理特征的对象的模型
2、示例一
inputs = keras.Input(shape=(37,))
x = keras.layers.Dense(32, activation="relu")(inputs)
outputs = keras.layers.Dense(5, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)
inputs = keras.Input(shape=(37,)) ,keras.Input
函数用于创建一个输入张量,其中shape=(37,)
表示输入张量的形状为一个长度为37的一维向量。
x = keras.layers.Dense(32, activation="relu")(inputs),定义一个全连接层(也称为密集层),名为x
。该层的神经元数量为32,激活函数为ReLU(Rectified Linear Unit)。通过将inputs
作为输入传递给Dense
层,可以将输入数据传递到该层进行处
outputs = keras.layers.Dense(5, activation="softmax")(x),定义了另一个全连接层,名为outputs
。与上一层不同,该层的神经元数量为5,激活函数为Softmax。Softmax函数通常用于多分类问题的最后一层,它将输出转换为概率分布,使得每个类别的概率之和为1
model = keras.Model(inputs=inputs, outputs=outputs),将inputs
和outputs
分别指定为模型的输入和输出,可以构建一个完整的神经网络模型
3、示例二
#定义了一个输入张量,形状为 (None, None, 3),其中 None 表示该维度可以是任意大小。这个输入张量代表了一个具有任意尺寸和通道数的图像数据
inputs = keras.Input(shape=(None, None, 3))
#使用 RandomCrop 层来随机裁剪输入图像。它将输入图像裁剪为宽度为 128、高度为 128 的区域。裁剪后的图像作为下一层的输入
processed = keras.layers.RandomCrop(width=128, height=128)(inputs)
#使用卷积层(Conv2D)来处理经过随机裁剪后的图像。卷积层的参数包括过滤器数量(filters=32)和卷积核的大小(kernel_size=3)。卷积层将学习从输入图像中提取特征
conv = keras.layers.Conv2D(filters=32, kernel_size=3)(processed)
#使用全局平均池化层(GlobalAveragePooling2D),用于将卷积层的输出进行降维。全局平均池化层将每个特征图的像素值求平均,得到一个一维向量,从而减少模型的参数数量并降低计算复杂度
pooling = keras.layers.GlobalAveragePooling2D()(conv)
#使用全连接层(Dense),将全局平均池化层的输出映射到一个具有 10 个神经元的特征向量。全连接层可以学习从输入特征中提取更复杂的特征表示
feature = keras.layers.Dense(10)(pooling)
#创建一个名为 full_model 的完整模型,它接受输入张量 inputs 并输出特征向量 feature。通过调用 keras.Model 函数,我们可以将输入和输出层连接起来,形成一个可训练的模型
full_model = keras.Model(inputs, feature)
#创建一个名为 backbone 的模型,它接受经过随机裁剪后的图像作为输入,并输出经过卷积层处理后的特征图。这个模型可以用作其他模型的骨干网络,提取出有用的特征表示
backbone = keras.Model(processed, conv)
#创建一个名为 activations 的模型,它接受经过卷积层处理后的特征图作为输入,并输出经过全局平均池化层处理后的特征向量。这个模型可以用于可视化卷积层的激活情况,帮助我们理解模型在提取特征时的行为
activations = keras.Model(conv, feature)
inputs = keras.Input(shape=(None, None, 3)),定义了一个输入张量,形状为 (None, None, 3),其中 None 表示该维度可以是任意大小。这个输入张量代表了一个具有任意尺寸和通道数的图像数据
processed = keras.layers.RandomCrop(width=128, height=128)(inputs),使用 RandomCrop 层来随机裁剪输入图像。它将输入图像裁剪为宽度为 128、高度为 128 的区域。裁剪后的图像作为下一层的输入
conv = keras.layers.Conv2D(filters=32, kernel_size=3)(processed),使用卷积层(Conv2D)来处理经过随机裁剪后的图像。卷积层的参数包括过滤器数量(filters=32)和卷积核的大小(kernel_size=3)。卷积层将学习从输入图像中提取特征
pooling = keras.layers.GlobalAveragePooling2D()(conv),使用全局平均池化层(GlobalAveragePooling2D),用于将卷积层的输出进行降维。全局平均池化层将每个特征图的像素值求平均,得到一个一维向量,从而减少模型的参数数量并降低计算复杂度
feature = keras.layers.Dense(10)(pooling),使用全连接层(Dense),将全局平均池化层的输出映射到一个具有 10 个神经元的特征向量。全连接层可以学习从输入特征中提取更复杂的特征表示
full_model = keras.Model(inputs, feature),创建一个名为 full_model 的完整模型,它接受输入张量 inputs 并输出特征向量 feature。通过调用 keras.Model 函数,我们可以将输入和输出层连接起来,形成一个可训练的模型
backbone = keras.Model(processed, conv),创建一个名为 backbone 的模型,它接受经过随机裁剪后的图像作为输入,并输出经过卷积层处理后的特征图。这个模型可以用作其他模型的骨干网络,提取出有用的特征表示
activations = keras.Model(conv, feature) ,创建一个名为 activations 的模型,它接受经过卷积层处理后的特征图作为输入,并输出经过全局平均池化层处理后的特征向量。这个模型可以用于可视化卷积层的激活情况,帮助我们理解模型在提取特征时的行为