Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与repeat()和batch()一起使用时的TensorFlow dataset.shuffle()行为_Tensorflow_Dataset - Fatal编程技术网

与repeat()和batch()一起使用时的TensorFlow dataset.shuffle()行为

与repeat()和batch()一起使用时的TensorFlow dataset.shuffle()行为,tensorflow,dataset,Tensorflow,Dataset,这到底能做什么 dataset = tf.data.Dataset.from_tensor_slices([0, 0, 0, 1, 1, 1, 2, 2, 2]) dataset.shuffle(buffer_size=5).repeat().batch(3) 我注意到了几个相关的问题,但没有一个完全回答了我的担忧。我对shuffle(buffer\u size)在做什么感到困惑。我知道它将把5个第一个示例[0,0,0,1,1]放入内存,但它接下来将如何处理这个缓冲区?这个缓冲区是如何与rep

这到底能做什么

dataset = tf.data.Dataset.from_tensor_slices([0, 0, 0, 1, 1, 1, 2, 2, 2])
dataset.shuffle(buffer_size=5).repeat().batch(3)

我注意到了几个相关的问题,但没有一个完全回答了我的担忧。我对
shuffle(buffer\u size)
在做什么感到困惑。我知道它将把5个第一个示例
[0,0,0,1,1]
放入内存,但它接下来将如何处理这个缓冲区?这个缓冲区是如何与
repeat()
batch()
交互的?

洗牌的工作方式很复杂,但是你可以先填充一个大小为buffer\u size的缓冲区,然后,每次你请求一个元素时,对该缓冲区中一个均匀随机的位置进行采样,并用一个新的元素替换它


洗牌前的批处理意味着您将洗牌预先制作的小批量(这样小批量本身不会改变,只是它们的顺序),而洗牌后的批处理允许您随机更改批次本身的内容。类似地,洗牌前重复意味着您将洗牌一个无限流示例(因此第二个历元的顺序将不同于第一个历元),而洗牌后重复意味着您将在每个历元中始终看到相同的示例。

我仍然不清楚它到底是如何工作的。您是否可以使用问题中给出的示例演示此过程?您可能会感到困惑,因为在tf2.0的alpha和beta版本中,shuffle和repeat的组合没有按照文档和以前的tensorflow版本的预期执行。有关更多详细信息,请参阅此github问题(以及一些我发现对理解洗牌、重复和批处理操作非常有用的示例):