You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MobileNetV2迁移学习做回归预测时输出维度异常求助

解决MobileNetV2迁移学习回归任务输出维度异常问题

我是迁移学习新手,尝试用预训练MobileNetV2解决回归问题,需要预测8个输出值,但训练后预测100个测试样本时,得到的却是MobileNetV2原输出层的7x7x1280维度结果,而非期望的8个值。以下是实现迁移学习的代码(因output_1和output_2分布不同,构建了两个输出层):

# Define MSE model with transfer learning
base_model_MSE = tf.keras.applications.MobileNetV2(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = base_model_MSE.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
x = Dense(512, activation='relu')(x)
x = Dense(256, activation='relu')(x)
x = Dense(128, activation='relu')(x)
output_1 = Dense(6, activation='sigmoid', name='output_1')(x)
output_2 = Dense(2, name='output_2')(x)

# Define the final model with transfer learning
final_model_MSE = Model(inputs=base_model_MSE.input, outputs=[output_1, output_2])

# Print the model summary
final_model_MSE.summary()

# Freeze the base model layers
for layer in base_model_MSE.layers:
    layer.trainable = False

# Print the model summary
final_model_MSE.summary()

# Compile the model
final_model_MSE.compile(optimizer=Adam(lr=0.001),
                        loss={'output_1': 'mse', 'output_1': 'mse'},
                        metrics={'output_2': 'mae', 'output_2': 'mae'})

# Fit the model
history_MSE = final_model_MSE.fit(train_data_resized, {'output_1': train_labels[:, :6],
                                                       'output_2': train_labels[:, 6:]},
                                  epochs=25, batch_size=64, validation_data=(
        val_data_resized, {'output_1': val_labels[:, :6], 'output_2': val_labels[:, 6:]}),
                                  verbose=1)

训练数据train_data_resized维度为4000x224x224x3,验证数据val_data_resized为1000x224x224x3,以下是解决输出维度异常的方法:

  • 修正模型编译时的字典键错误
    代码中compile函数的loss和metrics字典存在重复键,漏掉了对应输出层的配置:

    • loss字典重复设置output_1的损失,未配置output_2
    • metrics字典重复设置output_2的指标,未配置output_1
      这会导致模型编译异常,无法正确关联自定义输出层。修正后的编译代码:
    final_model_MSE.compile(optimizer=Adam(lr=0.001),
                            loss={'output_1': 'mse', 'output_2': 'mse'},
                            metrics={'output_1': 'mae', 'output_2': 'mae'})
    
  • 确认预测时调用的是最终模型
    检查预测代码,确保调用final_model_MSE.predict(test_data)而非base_model_MSE.predict(test_data)。若误调用基础模型,会直接返回其7x7x1280的特征图输出。

  • 验证模型结构正确性
    查看final_model_MSE.summary()的输出,确认模型输出层为output_1(6维)和output_2(2维)。同时确保正确导入Model类:from tensorflow.keras.models import Model。

  • 统一测试数据预处理
    确保测试数据与训练/验证数据的预处理一致:

    • 输入维度保持(224,224,3)
    • 使用tf.keras.applications.mobilenet_v2.preprocess_input处理输入,匹配MobileNetV2的输入要求。

内容的提问来源于stack exchange,提问作者Engineer90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:52:59