如何在 Keras 中组合不同的模型?

数据挖掘 喀拉斯 卷积神经网络 vgg16 连体网络 微调
2022-02-01 11:52:47

我有一个预训练的网络,由两部分组成,特征提取和相似性学习。

该网络接受两个输入并预测图像是否相同。

特征提取部分是冻结所有层的 VGGNet 16。

我只提取了特征向量并学习了由两个卷积层和四个密集层组成的相似性网络。

在此处输入图像描述

注意:由于尺寸太大,从图像中删除了最后一层。

现在,我想微调 VGGNet 的最后一个卷积块,并希望对每种类型的图像使用两个不同的 VGGNet 特征提取器。

我已经加载了训练好的模型并创建了一个从 Merged_feature_map 层开始的新模型:

model = Sequential()
for layer in ft_model.layers[3:]:
    model.add(layer)

现在,新模型将只包含相似性网络而没有特征提取部分。

我为每种类型的图像加载了两个 VGGNet,并将它们的最后一个卷积块解冻为:

vgg_left = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=(img_width, img_height, channels)))
vgg_left.name = "vgg_left"


vgg_right = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=(img_width, img_height, channels)))
vgg_right.name = "vgg_right"

那时,我有 3 个模型,我想将它们组合起来。两个 VGG 网络的输出应该是 Merged feature map 的输入。如何组合它们并使它们成为一个模型。

bottleneck_features_r = vgg_left(left_input)
bottleneck_features_s = vgg_right(right_input)

它应该是这样的:

在此处输入图像描述

1个回答

您可以使用model.outputor获取模型的输出get_layer并将它们tf.keras.layers.concatenate