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