Как совместить разные модели в керасе? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть предварительно обученная сеть, состоящая из двух частей: извлечение функций и изучение сходства.

Сеть принимает два входа и прогнозирует, что изображения одинаковы или нет.

Часть извлечения элементов была VG GNet 16 со всеми замороженными слоями.

Я только выделил векторы признаков и узнал сеть подобия, которая состоит из двух сверточных слоев, за которыми следуют четыре плотных слоя.

enter image description here

Примечание: удалены последние слои с изображения из-за большого размера.

Теперь я хочу подстроить последний сверточный блок 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)

Это должно быть как:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...