如何在tensorflow中实现双队列结构

时间:2016-06-12 16:48:41

标签: tensorflow

我正在使用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()

任何人都可以提供帮助!

1 个答案:

答案 0 :(得分:0)

我看到的一个问题是你混淆了图形构造和执行。您的for i in range(10)循环会创建一系列排队操作,但实际上不会将r*10+i添加到您的队列中。

我建议先通过队列教程来了解基本概念 - different。另外https://www.tensorflow.org/versions/r0.9/how_tos/threading_and_queues/index.html