Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确获取嵌套模型内层的输出?_Python_Keras - Fatal编程技术网

Python 如何正确获取嵌套模型内层的输出?

Python 如何正确获取嵌套模型内层的输出?,python,keras,Python,Keras,我正试图在预先培训过的MobileNet V2的基础上构建SSD。所以我需要从几个MobileNet核心层获得输出,添加一些卷积、优先级、整形、连接。。。最后,尝试建立一个模型:model=model(inputs=img\u input,outputs=out),我遇到了“图形断开”的问题。 这是我的伪代码: img_input = Input((224,224,3)) conv_model = MobileNetV2(weights='imagenet',

我正试图在预先培训过的MobileNet V2的基础上构建SSD。所以我需要从几个MobileNet核心层获得输出,添加一些卷积、优先级、整形、连接。。。最后,尝试建立一个模型:
model=model(inputs=img\u 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这样复杂的情况下也是如此。

无论惰性计算和静态图形是静态的,您调用的层顺序都很重要。 我应该首先使用整个嵌套模型的输出。例如:

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)