2016-06-12 73 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