У меня есть предварительно обученная сеть, состоящая из двух частей: извлечение функций и изучение сходства.
Сеть принимает два входа и прогнозирует, что изображения одинаковы или нет.
Часть извлечения элементов была VG GNet 16 со всеми замороженными слоями.
Я только выделил векторы признаков и узнал сеть подобия, которая состоит из двух сверточных слоев, за которыми следуют четыре плотных слоя.
Примечание: удалены последние слои с изображения из-за большого размера.
Теперь я хочу подстроить последний сверточный блок VG GNet и хочу использовать два разных экстрактора функций VG GNet для каждого типа изображения.
Я загрузил обученную модель и создал новую модель, которая начинается со слоя Merged_feature_map:
model = Sequential()
for layer in ft_model.layers[3:]:
model.add(layer)
Теперь новая модель будет содержать только сеть сходства без части извлечения признаков.
Я загрузил две VGGNets для каждого типа изображения и разморозил их последний сверточный блок следующим образом:
vgg_left = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=(img_width, img_height, channels)))
vgg_left.name = "vgg_left"
for idx, layer in enumerate(vgg_left.layers):
print(idx, layer.name, layer.trainable)
vgg_right = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=(img_width, img_height, channels)))
vgg_right.name = "vgg_right"
for idx, layer in enumerate(vgg_right.layers):
print(idx, layer.name, layer.trainable)
На данный момент у меня есть 3 модели, и я хочу объединить их. Вывод из обеих сетей VGG должен быть вводом объединенной карты объектов. Как их объединить и сделать из них единую модель.
bottleneck_features_r = vgg_left(left_input)
bottleneck_features_s = vgg_right(right_input)
Это должно быть как: