2016-06-12 75 views
0

我使用TensorFlow來實現一箇中性網絡,並希望實現這樣的體系結構:有2個隊列,即Q1和Q2。 Q1用一些文件名初始化,Q2將在後面填入例子。如何實現張量流中的雙隊列結構

每次會話運行一個步驟時,文件名將從Q1彈出,並進入處理部分。在處理部分中,從文件中讀取數據,並且從數據生成一些(例如32)不同的示例。然後,生成的32個示例將排入Q2。如果Q2達到了一定限度,則會出現一批示例。

特別是,我每生成一個文件就會產生近1M的例子,所以這樣的進程必須在後臺運行,避免阻塞主線程,排入Q2必須是異步的。

我未能找到解決方案。我曾嘗試類似以下內容:

import tensorflow as tf 

q1 = tf.FIFOQueue(capacity=32, dtypes=tf.int32) 
init_op = q1.enqueue_many(([0, 1, 2],)) 

q2 = tf.FIFOQueue(capacity=64, dtypes=tf.int32) 

r = q1.dequeue() 

# mimic generating examples from data read from the file 
for i in range(10): 
    enq_op = q2.enqueue(r * 10 + i) 

s = q2.dequeue() 

sess = tf.InteractiveSession() 

sess.run(init_op) 

# don't know what to do 

sess.close() 

任何人都可以幫忙!

回答

0

我看到的一個問題是你混淆了圖的構造和執行。您的for i in range(10)循環創建了一堆排隊操作,它實際上不會將r*10+i添加到您的隊列中。

我建議先通過隊列教程來了解基本概念 - https://www.tensorflow.org/versions/r0.9/how_tos/threading_and_queues/index.html。另外this

+0

嗨!感謝您的回覆,我確實意識到我誤解了這兩個概念。現在我相信我對他們很清楚,並且做了一些嘗試,但仍然失敗。你能看看我的新問題並給我一些幫助嗎? http://stackoverflow.com/questions/37797751/running-queue-in-background-in-tensorflow-causes-strange-exceptions – HanXu