Intellipaat Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Machine Learning by (19k points)

I have written a tensorflow CNN and it is already trained. I wish to restore it to run it on a few samples but unfortunately its spitting out:

ValueError: No variables to save

My eval code can be found here:

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()

1 Answer

0 votes
by (33.1k points)
edited by

You should create tf.train.Saver after the variables that you want to restore (or save). It must be created in the same graph as those variables.

Let's say Process.forward_propagation(…) also creates the variables in your model, adding the saver creation after this line should work:

forward_propgation_results = Process.forward_propagation(images)

You must pass the new tf.Graph that you created to the tf.Session constructor so you'll need to move the creation of sess inside that with block as well.

The resulting function will be something like:

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))

Hope this answer helps you!

To know more about this, go through the Artificial Intelligence Course.

Learn TensorFlow with the help of this comprehensive video tutorial:

31k questions

32.8k answers

501 comments

693 users

Browse Categories

...