Python tf.data.dataset.shuffle的机制是什么?

Python tf.data.dataset.shuffle的机制是什么?,python,tensorflow,deep-learning,tfrecord,Python,Tensorflow,Deep Learning,Tfrecord,假设我在一条记录中有100000个例子。我用缓冲区大小100做一个洗牌,它会每100个例子洗牌一次,在我们消耗了所有的例子并把另外100个例子拖入洗牌之后。或者,当我们使用训练数据时,它也会填充后面的示例,并从洗牌中统一提取,这样,在某个时间点,每个示例都有一定的概率,它在缓冲区中 它认为后者更有意义。洗牌功能是如何实现的?我查了一下,但找到了解释这个机制的来源 谢谢。摘自 Dataset.shuffle()转换随机地洗牌输入 使用与tf.RandomShuffleQueue类似的算法的数据集:

假设我在一条记录中有100000个例子。我用缓冲区大小100做一个洗牌,它会每100个例子洗牌一次,在我们消耗了所有的例子并把另外100个例子拖入洗牌之后。或者,当我们使用训练数据时,它也会填充后面的示例,并从洗牌中统一提取,这样,在某个时间点,每个示例都有一定的概率,它在缓冲区中

它认为后者更有意义。洗牌功能是如何实现的?我查了一下,但找到了解释这个机制的来源

谢谢。

摘自

Dataset.shuffle()
转换随机地洗牌输入 使用与tf.RandomShuffleQueue类似的算法的数据集:它 维护固定大小的缓冲区并统一选择下一个元素 从缓冲区中随机抽取

您可以找到操作的定义,它指向


此外,请注意,shuffle操作还允许您确定如何绘制批次(即,在一个历元之后,数据集是否总共被伪随机洗牌)。

感谢您的回复。我保留了一个1500大小的缓冲区,其中每个示例的形状都是10x128x128x3,批量大小大约是30,我想填充shuffle的过程可能非常慢。然而,当我查看日志时,由于推断速度很快,我看到很多日志信息都在填充洗牌。从0到1500,定期。这让我怀疑它是否真的保持了固定大小的洗牌。我也应该使用预回迁吗?既然洗牌保留了一个固定的缓冲区,为什么我们需要预取呢?事实上,即使我添加了预取,我仍然有一段时间的日志信息表明洗牌缓冲区已满,这很奇怪,因为我认为它会自动将下一个示例提取到缓冲区中。当消费明显快于推进洗牌时,会发生这种情况吗?