Tensorflow ValueError:无需保存的变量

Zan*_*ang 16 python machine-learning 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()
Run Code Online (Sandbox Code Playgroud)

mrr*_*rry 22

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

假设Process.forward_propagation(…)还在模型中创建变量,在此行之后添加保护程序创建应该起作用:

forward_propgation_results = Process.forward_propagation(images)
Run Code Online (Sandbox Code Playgroud)

此外,您必须将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))
Run Code Online (Sandbox Code Playgroud)

  • "必须在要恢复(或保存)的变量之后创建tf.train.Saver."这是什么原因? (3认同)