2016-07-28 7 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.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)) 
+0

Большое спасибо, хотя я удалить Eval данных = Eval данных и он должен работать. Прямо сейчас, когда я запускаю программу, python ничего не выводит. –

+0

Я не уверен, откуда происходит 'eval_data', поскольку это имя не связано в вашем примере. Использует ли 'Process.eval_inputs()' входной конвейер? Возможно, вам нужно добавить 'tf.train.start_queue_runners (sess = sess) после запуска' saver.restore() '. – mrry

+0

Спасибо. Код исправлен, но после добавления этой строки появилась новая ошибка. E tensorflow/core/client/tensor_c_api.cc: 485] [0] вне диапазона –