Как правильно получить вывод внутреннего слоя вложенной модели? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь собрать SSD на основе предварительно обученного MobileNetV2. Поэтому мне нужно получить выходные данные из нескольких уровней ядра MobileNet, добавить несколько Convolutions, Priors, Reshaping, Concatenate ... И, наконец, затем попытаться создать модель: model = Model(inputs=img_input, outputs=out), у меня проблема с «Разъединением графика». Вот мой псевдокод:

img_input = Input((224,224,3))
conv_model = MobileNetV2(weights='imagenet', 
                    include_top=False,
                    alpha=0.35,
                    pooling=None,                        
                    input_shape=(224, 224, 3))
block14 = conv_model.get_layer('block_14_project_BN').output
block14_box_conf = Conv2D(...)(block14)
block14_box_loc = Conv2D(...)(block14)
block14_priors = PriorBox(...)(block14_box_loc)
# same for other blocks
# Reshaping, Concatinations... softmax for conf...
model = Model(inputs=img_input, outputs=out)

И, наконец, у меня ошибка:

 Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(?, 224, 224, 3), dtype=float32) at layer "input_1". 
 The following previous layers were accessed without issue: []

Я могу построить MobileNet "по кирпичикам", но в этом случае не смогу загружать веса. И мне нужно понять причину этой ошибки.

Кроме того, эта ошибка появляется, если я пытаюсь использовать выходные данные какого-то внутреннего слоя вложенной модели, даже в не таких сложных случаях, как SSD.

1 Ответ

0 голосов
/ 25 июня 2019

Независимо от того, насколько ленивы ленивые вычисления и статические графики статичны, порядок слоев, которые вы называете, имеет значение.Сначала я должен использовать вывод всей вложенной модели.Например:

model_out = conv_model(img_input)
model_out_box_conf = Conv2D(...)(model_out)
model_out _box_loc = Conv2D(...)(model_out)
model_out_priors = PriorBox(...)(model_out_box_loc)

И только после этого я могу вызывать внутренние слои:

block14 = conv_model.get_layer('block_14_project_BN').output
block14_box_conf = Conv2D(...)(block14)
block14_box_loc = Conv2D(...)(block14)
block14_priors = PriorBox(...)(block14_box_loc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...