如何使用Tensorflow和FIFOQueue处理数据流

时间:2018-10-31 10:55:59

标签: python tensorflow queue

我正在尝试处理在神经网络中连续到达的数据。为了优化整个过程,我有:

  • 负责填充FIFOQueue的线程。
  • 另一个线程应该从队列中提取尽可能多的元素,直到阈值。即:min(queue.size(),MAX_BATCH_SIZE)。 MAX_BATCH_SIZE是我可以同时处理的最大值。

我设法使它起作用,但这是基本的,我想知道这种方法是否有更好的实现。我专注于队列的使用者线程。

操作定义:

self.queue = tf.FIFOQueue ...
self.input_dequeue_op = self.queue.dequeue_many(
                                tf.maximum(
                                    tf.constant(1), 
                                    tf.minimum(
                                        tf.constant(MAX_BATCH_SIZE), 
                                        self.queue.size()
                                    )
                                )
                            )

消费者主题:

with network.sess.as_default():
    while True:

            results = network.sess.run(self.input_dequeue_op)

基本上,我打算将最大数量的当前在队列中的元素发送到神经网络,直到MAX_BATCH_SIZE(这是可以同时处理的最大值)。

该操作获得我可以加载的最大实际批次。 在我看来,这是一种非常基本的形式,我也尝试过直接使用它:

self.input_dequeue_op = self.queue.dequeue_up_to(tf.constant(MAX_BATCH_SIZE))

但是即使添加了元素,队列也被无限期地阻塞。

还有另一种更好的方法吗?

0 个答案:

没有答案