我正在使用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 :(得分:0)
我看到的一个问题是你混淆了图形构造和执行。您的for i in range(10)
循环会创建一系列排队操作,但实际上不会将r*10+i
添加到您的队列中。
我建议先通过队列教程来了解基本概念 - different。另外https://www.tensorflow.org/versions/r0.9/how_tos/threading_and_queues/index.html