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

TensorFlow保存模型加载后预测异常、损失暴涨问题求助

解决TensorFlow模型保存后加载评估损失暴涨的问题

核心问题分析

训练完成后模型测试表现正常,但保存再加载后损失值异常飙升,大概率是输入数据分布不一致或模型状态未正确保存/恢复导致,以下是针对性的排查和解决方法:


1. 强制确保数据预处理逻辑完全一致

EfficientNet预训练权重要求输入图像遵循特定的预处理规则(如tf.keras.applications.efficientnet.preprocess_input,将像素值转换为[-1,1]范围),如果训练时应用了该预处理,但测试生成器未同步处理,会直接导致输入分布完全偏离,引发预测崩溃。

  • 检查CustomDataGen的实现,确保训练、验证、测试阶段的图像归一化、尺寸裁剪、通道顺序等逻辑完全一致;
  • 验证方法:取同一张测试图片,分别输出训练生成器和测试生成器处理后的像素值,确认两者数值范围一致。

2. 排查BatchNormalization层的状态

训练时BatchNormalization会实时更新移动均值和方差,推理时需使用训练好的统计值。如果加载模型后层状态未正确切换到推理模式,可能导致预测异常:

  • 加载模型后显式设置推理模式:
    model = tf.keras.models.load_model("best_model.keras")
    model.trainable = False  # 强制切换到推理模式
    model.evaluate(test_generator)
    
  • 确认EarlyStopping的restore_best_weights=True生效:训练结束后,先执行一次model.evaluate(test_generator)验证效果,确认权重为最佳状态后再保存模型。

3. 换用权重保存/加载方式验证

.keras格式保存可能因版本兼容问题丢失部分状态,尝试单独保存权重再加载:

# 训练完成后保存权重
model.save_weights("best_weights.h5")

# 加载时先重建模型结构,再加载权重
model = create_model()
model.compile(optimizer=Adam(learning_rate=0.001), loss="mse", metrics=['mae'])
model.load_weights("best_weights.h5")
model.evaluate(test_generator)

也可尝试SavedModel格式保存(文件夹形式):

model.save("best_saved_model")
loaded_model = tf.keras.models.load_model("best_saved_model")

4. 验证测试生成器的标签处理

如果训练时对标签做了归一化(如除以某个系数),但测试时生成器未同步还原标签范围,会导致计算损失时数值差距过大:

  • 取测试生成器的一个batch,打印标签值,确认其范围与训练时的标签范围一致;
  • 检查生成器中是否存在标签缩放、编码的逻辑漏洞。

快速排查步骤

  1. 对比输入数据:取同一张图片,分别输出训练/测试生成器处理后的像素值,确认分布一致;
  2. 对比模型权重:保存前和加载后,提取某一层(如最后一个Dense层)的权重,检查是否完全相等:
    pre_save_weights = model.layers[-1].get_weights()
    model.save("best_model.keras")
    loaded_model = tf.keras.models.load_model("best_model.keras")
    post_load_weights = loaded_model.layers[-1].get_weights()
    print(np.array_equal(pre_save_weights[0], post_load_weights[0]))
    
  3. 单样本预测对比:用保存前后的模型对同一个样本预测,查看输出结果是否一致:
    img, label = next(test_generator)
    pred_pre = model.predict(img[:1], verbose=0)
    pred_post = loaded_model.predict(img[:1], verbose=0)
    print(f"保存前预测:{pred_pre},保存后预测:{pred_post},真实标签:{label[:1]}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:42:42