如何将python函数中的数据排入TensorFlow队列

如何将python函数中的数据排入TensorFlow队列,python,tensorflow,Python,Tensorflow,我有一个python函数,当我调用它时,它会自动生成一个a(数据,标签)对。我不知道如何将此函数附加到TensorFlow FIFOQueue,以便队列中充满从我的函数生成的数据。到目前为止,我掌握的代码是: myq = tf.FIFOQueue(5000, [tf.float32, tf.float32], [[4],[1]]) enqueue_op = myq.enqueue(read_data()) # read_data() returns two numpy arrays of sha

我有一个python函数,当我调用它时,它会自动生成一个a(数据,标签)对。我不知道如何将此函数附加到TensorFlow FIFOQueue,以便队列中充满从我的函数生成的数据。到目前为止,我掌握的代码是:

myq = tf.FIFOQueue(5000, [tf.float32, tf.float32], [[4],[1]])
enqueue_op = myq.enqueue(read_data()) # read_data() returns two numpy arrays of shape [4] and [1]
qr = tf.train.QueueRunner(myq, [enqueue_op]*2)
...
threads = qr.create_threads(sess=sess,coord=coord, start=True)

但是,这只调用函数read_data()一次,并将相同的值不断推送到队列中。如何正确地将函数连接到enqueue方法,以便使用函数中的数据填充队列(最好在后台使用多个线程)。谢谢您的帮助。

我知道
读取数据是您自己的代码,而不是TF操作。您需要一个占位符用于
排队操作
,然后使用
feed\u dict
输入数据

# Graph setup
x_enqueue = tf.placeholder(tf.float32, shape=(4))
y_enqueue = tf.placeholder(tf.float32, shape=(1))
enqueue_op = myq.enqueue([x_enqueue, y_enqueue])

...

# Enqueue loop:
x_read, y_read = read_data()
sess.run(enqueue_op, feed_dict={x_enqueue: x_read, y_enqueue: y_read})

啊。因此,此设置与tf.train.QueueRunner不兼容,我需要编写自己的代码来线程化和循环enqueue op?(是的,read_data()不包含任何TF操作)好问题!我在设置第一个队列时也遇到了同样的问题。我还没有使用QueueRunner,我从阅读文档中了解到,只有将图形中的数据排入队列,它才会起作用,我推断这意味着它只支持从tensorflow文件加载数据,或者TF阅读器可以支持的任何内容。如果您在自己的函数中生成数据,则需要将其传递到图形,这意味着占位符。注意,您仍然可以使用
tf.train.Coordinator()
来协调关闭和循环操作,而不是
QueueRunner()
。记住使用
cancel\u pending\u enqueue\u operations=True关闭队列,以使排队操作退出。