TFLearn:依次加载 2 个不同的已保存模型时出错

TFLearn: Error in loading 2 different saved models one after another

我有 2 个不同的神经网络模型,使用 TFLearn 训练和保存。当我 运行 每个脚本时,保存的模型都会正确加载。我需要一个系统,在第一个模型的输出之后应该调用第二个模型。 但是当我在加载第一个模型后尝试加载第二个模型时,出现以下错误:

NotFoundError (see above for traceback): Key val_loss_2 not found in checkpoint [[Node: save_6/RestoreV2_42 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save_6/Const_0_0, save_6/RestoreV2_42/tensor_names, save_6/RestoreV2_42/shape_and_slices)]]

如果我注释掉第一个模型的加载,或者如果我 运行 分别 运行 两个脚本,则第二个模型已正确加载。知道为什么会发生此错误吗?

代码结构类似于..

from second_model_file import check_second_model

def run_first_model(input):
    features = convert_to_features(input)
    model = tflearn.DNN(get_model())
    model.load("model1_path/model1")   # relative path
    pred = model.predict(features)
    ...
    if pred == certain_value:
       check_second_model()

second_model_file.py 类似:

def check_second_model():
    input_var = get_input_var()
    model2 = tflearn.DNN(regression_model())
    model2.load("model2_path/model2")   # relative path  
    pred = model2.predict(input_var)
    #other stuff  ......     

模型已保存在不同的文件夹中,因此每个模型都有自己的 checkpoint 文件

好吧,我找到了解决方案。它隐藏在对此thread 的讨论中。 在构建第二个网络和模型之前,我使用了 tf.reset_default_graph() 并且它起作用了。希望这也能帮助别人。

新代码:

import tensorflow as tf

def check_second_model():
    input_var = get_input_var()
    tf.reset_default_graph()
    model2 = tflearn.DNN(regression_model())
    model2.load("model2_path/model2")   # relative path  
    pred = model2.predict(input_var)

虽然我凭直觉理解为什么这个解决方案有效,但如果有人能更好地解释我为什么这样设计,我会很高兴。