我加载保存的模型,出于微调的原因,我将分类层添加到加载模型的输出中,所以这是我写的:
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)
. Ifdata_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/