TensorFlow TFRecordDataset shuffle buffer_size 行为

dem*_*ies 3 python tensorflow tensorflow-datasets

我不清楚tf.TFRecordDatasetbuffer_size中的参数的作用。假设我们有以下代码:

dataset = dataset.shuffle(buffer_size=10000).repeat().batch(batch_size)
Run Code Online (Sandbox Code Playgroud)

这是否意味着只会使用前 10k 个样本并永远重复,或者我会遍历整个数据集?如果不是,它到底有什么作用?这段代码又如何呢?

dataset = dataset.repeat().shuffle(buffer_size=10000).batch(batch_size)
Run Code Online (Sandbox Code Playgroud)

我注意到了这篇文章,但它没有提及任何内容buffer_size。

Oli*_*rot 5

这个答案可能有助于更好地理解buffer_size该shuffle方法的参数。

简而言之,数据集的缓冲区中总是有多个buffer_size元素,并且每次添加元素时都会对该缓冲区进行重新排列。

因此,缓冲区大小为 1 就像不进行混洗,而拥有数据集长度的缓冲区就像传统的混洗。


要了解打乱和重复数据集之间的正确顺序,请查看官方性能指南。

最佳实践通常是先洗牌然后重复,因为这将确保您在每个时期都能看到整个数据集。