2017-08-29 8 views
7

से reinitializable इटरेटर ऐसा लगता है के रूप में अगर एक MonitoredTrainingSession पहले कॉल करने से पहले कुछ कार्यों (लॉगिंग?) कर .run को (..), जिसका अर्थ है कि जब मैं कार्य करें:tf.train.MonitoredTrainingSession और डेटासेट

train_data = reader.traindata() # returns a tf.contrib.data.Dataset 
it = tf.contrib.data.Iterator.from_structure(train_data.output_types, train_data.output_shapes) 
init_train = it.make_initializer(train_data) 
ne = it.get_next() 
ts = tf.train.MonitoredTrainingSession(checkpoint_dir=save_path) 

... no calls to ts.run ... 

ts.run(init_train) 

FailedPreconditionError (see above for traceback): GetNext() failed because the iterator has not been initialized. Ensure that you have run the initializer operation for this iterator before getting the next element 

तो यह तेजी के रूप में अगर MonitoredTrainingSession आपरेशन मैं इसे फ़ीड चलाने से पहले कुछ कार्यों कर रहा है, यह असंभव डेटासेट से एक reinitializable इटरेटर साथ togeather उपयोग करने के लिए कर रही है:

यह त्रुटि अर्जित करता है।

मुझे यकीन है कि मैं कुछ याद आ रही है और क्या :-)

+0

आंशिक रूप से अपने आप के लिए उत्तर के लिए, मैं का उपयोग करके इसे हल करने के लिए कामयाब रहे) लेकिन यह एक हैक की तरह लगता है और एक अनुशंसित दृष्टिकोण नहीं है? –

उत्तर

5

लग रहा है कोई सीधा समाधान Tensorflow में अभी तक मौजूद है जानकर बहुत खुशी होगी हूँ। हां यह अजीब बात है कि उन्होंने डेटासेट एपीआई के लिए पूर्ण समर्थन नहीं दिया।

कारण यह है कि निगरानी सत्र init_op को चेकपॉइंट से लोड करते समय चलाने के लिए छोड़ देता है। इसलिए Iterator प्रारंभकर्ता एक स्थानीय चर होना चाहिए। .ts._coordinated_creator.tf_sess.run (init_train: -

वर्तमान काम के आसपास सुझाव इस मुद्दे में दी गई है https://github.com/tensorflow/tensorflow/issues/12859

scaffold = tf.train.Scaffold(local_init_op=tf.group(tf.local_variables_initializer(), 
            init_train)) 
with tf.train.MonitoredTrainingSession(scaffold=scaffold, 
             checkpoint_dir=checkpoint_dir) as sess: 
    while not sess.should_stop(): 
     sess.run(train_op)