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

基于Inception3的二分类图像模型加载后评估报错求助

解决TensorFlow 1.x中加载Keras模型后评估时的FailedPreconditionError问题

我之前在TensorFlow 1.14.0-rc1搭配Keras 2.2.4-tf的环境下,用InceptionV3训练二分类图像分类器时,也碰到过完全一样的问题:训练完成后直接评估模型一切正常,但保存模型再重新加载,用手动创建的tf.Session评估就会抛出FailedPreconditionError,提示变量未初始化。

问题根源

在TensorFlow 1.x版本中,Keras有自己的会话管理机制。你当前的代码逻辑有个关键问题:在加载模型之前就执行了sess.run(tf.global_variables_initializer()),这时候模型的变量还没被创建,等于初始化了个空集;等加载模型后,新生成的变量并没有在当前会话中被初始化,自然会提示找不到变量。

解决方案

这里有两种可靠的解决方式,根据你的需求选择:

方式一:让Keras自动管理会话(推荐)

最简单的办法就是去掉手动创建的tf.Session,让Keras自己处理会话逻辑,这也是Keras在TF1.x中的默认使用方式:

# 无需手动创建Session
new_model = tf.keras.models.load_model('mymodel.h5')
new_model.summary()
eval_model = new_model.evaluate(image_test, label_test)

方式二:手动关联Session和Keras(必须用Session时)

如果你的业务逻辑必须手动创建会话,那需要调整步骤顺序:先加载模型,再初始化变量,并且要告诉Keras使用当前的会话:

with tf.compat.v1.Session() as sess:
    # 先加载模型
    new_model = tf.keras.models.load_model('mymodel.h5')
    # 加载完成后,初始化所有变量
    sess.run(tf.global_variables_initializer())
    # 关键:让Keras绑定当前会话
    tf.keras.backend.set_session(sess)
    new_model.summary()
    eval_model = new_model.evaluate(image_test, label_test)

这里的tf.keras.backend.set_session(sess)是核心,它会让Keras后续的所有操作都使用你手动创建的会话,避免出现会话不共享导致的变量找不到问题。

补充说明

训练完成后直接评估没问题,是因为训练过程中Keras已经在自己的会话里完成了所有变量的初始化,此时模型的变量都处于可用状态;但保存再加载后,新的模型实例相当于重新构建了变量图,必须在当前会话中重新初始化才能使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:17:38