2017-01-10 56 views
0

我使用tf.contrib.learn.ReadBatchFeatureshttps://www.tensorflow.org/versions/master/api_docs/python/contrib.learn/input_processing#read_batch_features)在Example中讀取原型作爲我的輸入函數的一部分,它返回Tensor對象的字典。在訓練完模型後,在我的Estimator上調用predict作爲數組返回一批預測,我想將其與已知值進行比較。TensorFlow:將批量特徵讀取到數組

我嘗試通過調用tf.Session().run(labels)來獲得已知值,其中labels是從輸入函數返回的已知值的Tensor。但是,在這一點上,我的程序掛起。我懷疑它被困在從磁盤讀取標籤的無限循環中,而不是像我想的那樣只讀一個批次。

這是在labelsTensor中獲取一批值的正確方法嗎?

編輯:我試過啓動隊列跑步者,下面是否正確?

_, labels = eval_input_fn() 
with tf.Session().as_default(): 
    tf.local_variables_initializer() 
    tf.train.start_queue_runners() 
    label_values = labels.eval() 
print(label_values) 
+1

也許你沒有啓動隊列亞軍和您的隊列爲空?從空隊列中讀取掛起 –

+0

謝謝,我記得現在文檔提到了這一點,但我忘了它。我的會議仍然掛起,你能告訴我有什麼問題嗎? – Dimpl

+0

添加超時以查看掛起的操作,像'config = tf.ConfigProto(); config.operation_timeout_in_ms = 60000; sess = tf.InteractiveSession(config = config)' –

回答

2

您需要整個設置是:

_, labels = eval_input_fn() 

with tf.Session() as sess: 
     sess.run([ 
      tf.local_variables_initializer(), 
      tf.global_variables_initializer() 
     ]) 

     coord = tf.train.Coordinator() 
     threads = tf.train.start_queue_runners(sess=sess, coord=coord) 

     try: 
      while not coord.should_stop(): 
       print(sess.run(label)) 

     except tf.errors.OutOfRangeError as error: 
      coord.request_stop(error) 
     finally: 
      coord.request_stop() 
      coord.join(threads)