关于shuffle的原理
来源:7-7 文本生成实战之构建模型
慕斯8458511
2021-04-12
查阅了api和一些文章对于shuffle都没有一个很好的解释。
TensorFlow2的api中:
For instance, if your dataset contains 10,000 elements but buffer_size is set to 1,000, then shuffle will initially select a random element from only the first 1,000 elements in the buffer. Once an element is selected, its space in the buffer is replaced by the next (i.e. 1,001-st) element, maintaining the 1,000 element buffer.
还有知乎的一篇文章:buffer_size 规定了乱序缓冲区的大小,且要求缓冲区大小大于或等于数据集的完整大小;
帮助手册中的例子如下:
假设数据集的大小为10000,buffer_size的大小为1000,最开始算法会把前1000个数据放入缓冲区;当从缓冲区的这1000个元素中随机选出第一个元素后,这个元素的位置会被数据集的第1001个元素替换;然后再从这1000个元素中随机选取第二个元素,第二个元素的位置又会被数据集中的第1002个数据替换,以此类推…
但是对于buffer里的数据是应该如何重新再放入数据集中没有很好的解释。
d = np.arange(0,6).reshape([6,])
dataset = tf.data.Dataset.from_tensor_slices(d)
dataset.shuffle(buffer_size=1)
对于这段代码来说,buffer_size=1时出现的一个结果是2 3 1 5 0 4 buffer_size=3出现的一个结果是1 2 4 0 5 3计算的过程是怎么样的,期待老师解惑
1回答
-
正十七
2021-04-14
同学你好,buffer是实时递补的。比如buffer_size=3的时候
刚开始,buffer里是[1,2,3], 当1被选择之后,下一个原始4就被递补进来,buffer里就是[4,2,3], 然后2被选择, 0进来。
但是对于buffer_size=1的这个case,我看底层代码还没有搞明白,理论上应该是顺序遍历。我搞明白了再回复哈。
00
相似问题
回答 1
回答 1