嗯,我正在努力理解线程和队列。
我在网上看到了很多文档,但令人惊讶的是,在tensorflow 2.0中甚至没有一个关于这个主题的例子。
我想让我的队列做的是,
- 定义生成示例的操作。
- 定义队列
- 定义一个enqueue_operation,在上面的队列中使用多个线程来排队。
- 控制此队列以取消批量队列。
我想说的是,
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
取代。
很抱歉这里这么乱。我问了也安排不了。
欢迎提出意见。提前谢谢。
我认为首选的方法是使用tf.data.Dataset
API。你可以点击这个链接。我还将突出显示帮助您为批处理实现多线程的重要代码。
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来提高性能该映射将使用多个线程来处理元素。如果确定性顺序不是必需的,它也可以提高性能确定性= False。
我认为你应该遵循这个API。
还要看看cache
和prefetch
API,这优化了输入管道。