【问题标题】:Input 0 is incompatible with layer global_average_pooling2d_4: expected ndim=4, found ndim=2 error输入 0 与层 global_average_pooling2d_4 不兼容:预期 ndim=4,发现 ndim=2 错误
【发布时间】:2019-08-14 11:34:33
【问题描述】:

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

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

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

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

这里似乎有什么问题?

model = VGG16(weights='imagenet', include_top=True)
model.layers.pop()
model.layers.pop()
model.layers.pop()
model.layers.pop()
model.layers.pop()
x = model.output
x = GlobalAveragePooling2D()(x)

【问题讨论】:

  • 全局平均池化层是的,它必须和其他层一样是 4d,并且您有一些 2d 输入

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2018-09-25
    • 2017-11-18
    • 2020-04-18
    相关资源
    最近更新 更多