【问题标题】:How can I manage Queues in Tensorflow 2.0?如何在 Tensorflow 2.0 中管理队列?
【发布时间】:2021-01-14 18:38:56
【问题描述】:

好吧,我正在尝试了解线程和队列。

我在网上看到了很多文档,但令人惊讶的是,在 tensorflow 2.0 中甚至没有一个关于此主题的示例。

我希望我的队列做的是,

  1. 定义生成示例的操作。
  2. 定义一个队列。
  3. 定义一个 enqueue_operation,使用多个线程将上面创建的队列中的示例排入队列。
  4. 控制此队列以使批次出队。

我的想法是,

import tensorflow as tf
import threading

batch_size = 2
example = tf.random.normal([1, 2]) # Generate an example, shape = [1, 2]
queue = tf.queue.RandomShuffleQueue(capacity=10, min_after_dequeue=0, \
    dyptes=tf.float32, shapes=[1, 2])
enqueue_op = queue.enqueue(example)
# inputs = queue.dequeue(2) # Don't run this. This would stop your computer.

我不知道我在做什么。我还学习了如何使用tf.train.Coordinator() 管理多个线程,但我不知道在哪里使用它..

在问这个问题时,我怀疑tf.data.Dataset 中的许多 API 替换了所有这些,并且多个线程可以替换为 tf.data.experimental.AUTOTUNE

对不起,这里的所有混乱。即使在询问期间我也无法正确安排。
任何 cmets 将不胜感激。提前致谢。

【问题讨论】:

    标签: python multithreading tensorflow queue


    【解决方案1】:

    我认为首选方法是使用tf.data.Dataset API。你可以关注这个link。我还将重点介绍有助于您为批处理实现多线程的重要代码。

    dataset = Dataset.range(1, 6)  # ==> [ 1, 2, 3, 4, 5 ]
    dataset = dataset.map(lambda x: x + 1,
        num_parallel_calls=tf.data.AUTOTUNE,
        deterministic=False)
    

    该链接中还记录了以下内容:

    通常可以通过设置 num_parallel_calls 来提高性能 该映射将使用多个线程来处理元素。如果 不需要确定性顺序,它还可以提高性能 设置确定性=假。

    我认为你应该遵循这个 API。

    还可以查看cacheprefetch API,这可以优化输入管道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多