首页 > 解决方案 > 如何使用 GlobalAveragePool 层作为模型的输出

问题描述

当我尝试使用另一个模型的输出构建模型时收到此错误。

Output tensors to a Model must be the output of a Keras `Layer` (thus holding past layer metadata). Found: <keras.layers.pooling.GlobalAveragePooling2D object at 0x7Somthing or another

我想要做的是使用微调模型作为基础模型,并使用不同的方法(SCNN 而不是 CNN)保留整个事物。

这就是我声明模型的方式以及它出错的地方。

pair_base_model = Model(inputs = base_model.input, outputs=base_model.get_layer('glb_avg_pool'))

这就是我加载以前的模型的方式

base_model = load_model('../input/base-model-reid/0.ckpt')
print(base_model.summary())

这给了我这个

......... Whole bunch of other stuff
block14_sepconv2_act (Activatio (None, 7, 7, 2048)   0           block14_sepconv2_bn[0][0]        
__________________________________________________________________________________________________
glb_avg_pool (GlobalAveragePool (None, 2048)         0           block14_sepconv2_act[0][0]       
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 1502)         3077598     glb_avg_pool[0][0]               
==================================================================================================
Total params: 23,939,078
Trainable params: 10,980,862
Non-trainable params: 12,958,216
__________________________________________________________________________________________________
None

标签: python-3.xtensorflowkeras

解决方案


我很愚蠢,我做这个有点太晚了,发现一些简单的东西我搞砸了。我需要使用图层的 .output 以获得输出我不能只调用 .get_layer(xxxxxxx) 因为这不起作用

pair_base_model = Model(inputs = base_model.input, outputs=base_model.get_layer('glb_avg_pool').output)

这是工作代码。感谢任何看过这个的人。


推荐阅读