2016-07-28 32 views
6

से बचाने के लिए कोई चर नहीं है मैंने एक tensorflow सीएनएन लिखा है और यह पहले ही प्रशिक्षित है। मैं कुछ नमूने लेकिन दुर्भाग्य से इसके बाहर थूकना पर इसे चलाने के लिए इसे फिर से स्थापित करना चाहते हैं:टेन्सफोर्लो वैल्यूएरर:

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 निर्माता करने के लिए बनाया से गुजरना होगा के निर्माण को 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 डेटा निकालने के लिए किया था और यह अभी भी काम करना चाहिए। अभी जब मैं प्रोग्राम चलाता हूं, पाइथन कुछ भी आउटपुट नहीं करता है। –

+0

मुझे यकीन नहीं है कि 'eval_data' कहां से आता है, क्योंकि वह नाम आपके उदाहरण में बाध्य नहीं है। क्या Process.eval_inputs() 'इनपुट पाइपलाइन का उपयोग करता है? शायद आपको 'saver.restore() 'चलाने के बाद' tf.train.start_queue_runners (sess = sess) जोड़ने की आवश्यकता है। – mrry

+0

धन्यवाद। कोड तय किया गया है लेकिन उस पंक्ति को जोड़ने के बाद एक नई त्रुटि पॉप अप हो गई है। ई tensorflow/कोर/ग्राहक/tensor_c_api.cc: 485] लक्ष्य [0] सीमा से बाहर है –

संबंधित मुद्दे