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

TensorFlow Saved Model相同输入推理结果不一致问题求助

解决Wide ResNet模型重复预测结果不一致的问题

核心原因

你的模型结构中包含Dropout层,该层在训练阶段会随机失活部分神经元以防止过拟合,但在推理阶段需要关闭随机失活逻辑。当前问题是加载模型后,推理时Dropout层仍处于训练模式,导致每次预测的随机失活结果不同,最终输出不一致。

解决步骤

1. 显式强制模型进入推理模式

加载模型后,通过training=False参数调用模型,强制所有层(包括Dropout)切换到推理状态:

import tensorflow as tf
import numpy as np
model = tf.keras.models.load_model("saved_model.pb")
test = np.ones((1, 160, 160, 3), dtype=np.float32)

# 使用training=False调用模型,替代model.predict
for _ in range(2):
    out = model(test, training=False)
    print("Empty", out.numpy())

2. 全局切换模型到评估模式

也可以通过设置model.trainable = False全局关闭训练模式,所有层会自动切换到推理状态:

model = tf.keras.models.load_model("saved_model.pb")
model.trainable = False  # 全局切换到推理模式
test = np.ones((1, 160, 160, 3), dtype=np.float32)
for _ in range(2):
    out = model.predict(test)
    print("Empty", out)

3. 验证模型保存与加载的完整性

如果上述方法无效,检查模型保存是否完整:

  • 确保训练完成后,使用model.save()完整保存模型(包括层配置和权重),而非仅保存权重。
  • 加载时确认没有修改模型结构,避免Dropout层的配置被意外覆盖。

4. 排除设备精度差异(次要)

GPU与CPU的浮点数计算精度可能存在微小差异,但不会导致量级明显变化。若仍有极小误差,可通过设置tf.keras.backend.set_floatx('float32')统一精度,或在GPU上执行推理验证结果一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:32:12