1

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

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]

谁能帮助我并告诉我这个错误是什么以及我该如何解决这个问题。谢谢!

4

1 回答 1

0

如果您有共享model.h5架构或model.h5.

在您的情况下,输入维度是2预期tf.keras.layers.GlobalAveragePooling2D()的输入维度4

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

输入形状:如果data_format='channels_last':具有形状的 4D 张量 (batch_size, rows, cols, channels)。如果data_format='channels_first': 4D 张量与形状(batch_size, channels, rows, cols)

在这个tensorflow 教程中,您将学习如何通过使用来自预训练网络的迁移学习和微调来对猫和狗的图像进行分类。

于 2020-10-12T07:49:41.987 回答