输入0与图层global_average_pooling2d_4不兼容:预期ndim = 4,发现ndim = 2错误

时间:2019-08-14 11:34:33

标签: python tensorflow keras deep-learning vgg-net

我正在尝试微调VGG16模型。我已经删除了最后5层

CardDeck

现在,我想添加一个全局平均池层,但出现此错误

  

输入0与global_average_pooling2d_4层不兼容:预期ndim = 4,发现ndim = 2 **

这里似乎是什么问题?

(*block5_pool (MaxPooling2D),flatten(Flatten),fc1 (Dense),fc2 (Dense),predictions (Dense)*). 

1 个答案:

答案 0 :(得分:1)

如果要删除最后四层,则只需使用include_top=False。此外,使用pooling='avg'添加一个GlobalAveragePooling2D层作为最后一层:

model = VGG16(weights='imagenet', include_top=False, pooling='avg')

关于原始解决方案为何不起作用的注释:正如this answer中已经建议的那样,您不能在模型的pop()属性上使用layers方法来删除图层。相反,如果要添加新的连接,则需要直接引用其输出(例如model.layers[-4].output),然后将其提供给其他层。