我已经写了一个tensorflow CNN,它已经受过训练。我希望将其还原以在几个示例上运行它,但不幸的是它吐出来了:
ValueError:没有要保存的变量
我的评估代码可以在这里找到:
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()
在tf.train.Saver必须创建 后 要恢复(或保存)的变量。此外,必须在与这些变量相同的图形中创建它。
tf.train.Saver
假设Process.forward_propagation(…)还可以在模型中创建变量,则在此行之后添加保护程序创建应该可以:
Process.forward_propagation(…)
forward_propgation_results = Process.forward_propagation(images)
另外,您必须将tf.Graph创建的新内容传递给tf.Session构造函数,以便也需要sess在该with块内部移动创建内容。
tf.Graph
tf.Session
sess
with
结果函数将类似于:
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))