python - ValueError : Input 0 of layer global_average_pooling2d is incompatible with the layer: expected ndim=4, 发现 ndim=2。完整形状收到 : [None, 128]

标签 python tensorflow2

我加载保存的模型,出于微调的原因,我将分类层添加到加载模型的输出中,所以这是我写的:

def create_keras_model():
    model = tf.keras.models.load_model('model.h5', compile=False)
    resnet_output = model.output
    layer1 = tf.keras.layers.GlobalAveragePooling2D()(resnet_output)
    layer2 = tf.keras.layers.Dense(units=256, use_bias=False, name='nonlinear')(layer1)
    model_output = tf.keras.layers.Dense(units=2, use_bias=False, name='output', activation='relu')(layer2)
    model = tf.keras.Model(model.input, model_output)
    return model

但我发现这个错误:

ValueError: Input 0 of layer global_average_pooling2d is incompatible with the layer: expected ndim=4, found ndim=2. Full shape received: [None, 128]

任何人都可以帮助我并告诉我这个错误是什么以及如何解决这个问题。 谢谢!

最佳答案

如果您共享 model.h5 架构或 model.h5 的最后一层,本可以回答得更好。

在您的情况下,输入维度为 2,其中 tf.keras.layers.GlobalAveragePooling2D() 期望输入维度为 4

根据 tf.keras.layers.GlobalAveragePooling2D文档中,tf.keras.layers.GlobalAveragePooling2D 层期望低于输入形状 -

Input shape: If data_format='channels_last': 4D tensor with shape (batch_size, rows, cols, channels). If data_format='channels_first': 4D tensor with shape (batch_size, channels, rows, cols).

在此tensorflow tutorial ,您将学习如何使用预训练网络的迁移学习和微调对猫和狗的图像进行分类。

关于python - ValueError : Input 0 of layer global_average_pooling2d is incompatible with the layer: expected ndim=4, 发现 ndim=2。完整形状收到 : [None, 128],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64276992/

相关文章:

python - tf.keras.models.model 与 tf.keras.model

python - 合并两个数据帧以模仿 'select * from tablea, tableb'

python - 用另一个数据框中的值填充 pandas 数据框(组合)

python - 设置 FLASK_DEBUG=1 不适用于 Powershell

python - 如何自定义 Django 模型的 python 端?

python - Trace Bug 只在 CI 中偶尔发生

tensorflow - 如何从 Tensorflow.js (.json) 模型转换为 Tensorflow (SavedModel) 或 Tensorflow Lite (.tflite) 模型?