Как связать скрытый слой ResNet50 с входными данными другой модели?

Я пытаюсь объединить вывод скрытого слоя в ResNet с вводом другой модели, но получаю следующую ошибку:

ValueError: выходные тензоры в модель должны быть выходными данными Keras Layer (таким образом, сохраняются метаданные прошлого слоя)

Я использую слой Concatenate из Keras, как рекомендовано в Как объединить два слоя в keras ?, однако это не сработало. Что мне может не хватать? Надо ли еще добавить к нему плотный слой? Идея состоит в том, чтобы не изменять второй вход, пока он не будет объединен с первым входом (объединенный вход будет входом третьей модели).

resnet_features = resnet.get_layer('avg_pool').output
model2_features = Input(shape=(None, 32))
all_features = Concatenate([resnet_features, model2_features])

mixer = Model(inputs=[resnet.input, model2_features], 
                             outputs=all_features)

person Damares Oliveira    schedule 14.02.2019    source источник


Ответы (1)


Похоже, вам не хватает двух скобок на уровне конкатенации. Должно получиться так:

all_features = Concatenate()([resnet_features, model2_features])

Более того, вы должны убедиться, что формы resnet_features и model2_features одинаковы, за исключением оси конкатенации, поскольку в противном случае вы не сможете их объединить.

person Anna Krogager    schedule 14.02.2019
comment
Вот и все. Большое спасибо. Мне также пришлось изменить model2_features = Input (shape = (None, 32)) на model2_features = Input (shape = (32,)). Керас по умолчанию добавляет размер для пакета. - person Damares Oliveira; 14.02.2019