我加载保存的模型,出于微调的原因,我在加载的模型的输出中添加了分类层,所以我写的是:
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.GlobalEveragePooling二维层预期低于输入形状-
输入形状:如果
data_format='channels_last'
:4D张量具有形状(batch_size, rows, cols, channels)
。如果data_format='channels_first'
:形状为CCD_ 9的4D张量。
在本tensorflow教程中,您将学习如何通过使用预训练网络的迁移学习和微调来对猫和狗的图像进行分类。