2016-07-28 211 views
6

我已经写了一个张量流CNN,它已经被训练了。我想恢复它在几样,但不幸的是它吐出运行:Tensorflow ValueError:没有要保存的变量

ValueError: No variables to save

我的eval代码可以在这里找到:

import tensorflow as tf 

import main 
import Process 
import Input 

eval_dir = "/Users/Zanhuang/Desktop/NNP/model.ckpt-30" 
checkpoint_dir = "/Users/Zanhuang/Desktop/NNP/checkpoint" 

init_op = tf.initialize_all_variables() 
saver = tf.train.Saver() 

def evaluate(): 
    with tf.Graph().as_default() as g: 
    sess.run(init_op) 

    ckpt = tf.train.get_checkpoint_state(checkpoint_dir) 

    saver.restore(sess, eval_dir) 

    images, labels = Process.eval_inputs(eval_data = eval_data) 

    forward_propgation_results = Process.forward_propagation(images) 

    top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1) 

    print(top_k_op) 

def main(argv=None): 
    evaluate() 

if __name__ == '__main__': 
    tf.app.run() 

回答

10

tf.train.Saver必须创建变量你想恢复(或保存)。此外,它必须在与这些变量相同的图形中创建。

假设Process.forward_propagation(…)还创建模型中的变量,增加了保护创作这条线之后应该工作:

forward_propgation_results = Process.forward_propagation(images) 

此外,你必须通过你创建的tf.Session构造函数,因此你的新tf.Graph将需要在with块内移动创建sess

产生的功能将是这样的:

def evaluate(): 
    with tf.Graph().as_default() as g: 
    images, labels = Process.eval_inputs(eval_data = eval_data) 
    forward_propgation_results = Process.forward_propagation(images) 
    init_op = tf.initialize_all_variables() 
    saver = tf.train.Saver() 
    top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1) 

    with tf.Session(graph=g) as sess: 
    sess.run(init_op) 
    saver.restore(sess, eval_dir) 
    print(sess.run(top_k_op)) 
+0

非常感谢你,虽然我没有删除EVAL数据= EVAL数据,它应该仍然工作。现在当我运行程序时,python不会输出任何内容。 –

+0

我不确定'eval_data'来自哪里,因为该名称在您的示例中未被绑定。 Process.eval_inputs()是否使用输入管道?也许你需要在运行'saver.restore()'后添加'tf.train.start_queue_runners(sess = sess)。 – mrry

+0

谢谢。代码是固定的,但添加该行后弹出新的错误。 E tensorflow/core/client/tensor_c_api.cc:485] targets [0]超出范围 –

相关问题