Tensor flow 的 tf.data.Dataset.shuffle
Tensor flow 的 tf.data.Dataset.shuffle
在 ipynb中输入
import tensorflow as tf
from tensorflow.keras import
datasets,layers,models
dataset = tf.data.Dataset.range(10)
dataset = dataset.shuffle(3,
reshuffle_each_iteration=True)
list(dataset.as_numpy_iterator())
会得到一组奇怪的数组
测试过好多次,第一个数字一定是0 1 2三个数字,不会是其他数字,第一条指令会生成一个0~9一共十个数字,第二条指令会从中抓出前三个数字,在例子中第一次会抓出0 1 2,这三个数字放进缓存里,然后随机扔出第一个数字,作为输出的第一个数字,例子中第一个随机出来的数字是0,这时缓存里就剩下1和2,然后因为缓存设定是3个数字,所以会抓第四个数字进来,补足缓存里面三个数字,这时缓存里有三个数字分别是12和被抓进来的3,然后随机抽一个幸运观众扔出去作为第二个数字输出,例子里输出了2,那么此时缓存里剩下1和3,然后4就会接着被放进缓存里,重复之前的动作,最终把十个数字输出完。
要注意的是被补进缓存的是还没被补进的下一个数字,比如第一次进入缓存的是0,1,2,那么下一个被补进缓存的就是3,再下一个就是4(因为第一条指令生成的数组是[0,1,2,3,4,5,6,7,8,9]),按顺序补进去
如果第一个指令的数字和第二个指令的数字一样大的话,缓存就会把所有数据抓下来,然后random丢出来,一直到丢完为止
Shuffle后面有个叫reshuffle_each_iteration的参数,这个参数默认true,如果是true的话,第一次结果和第二次结果各自random之后输出(往后的每一次都是各自random设置后输出),如果参数是false的话,则会把第一次random之后的结果也当做之后的结果也就是第一和第二次的结果都是一样的(往后无数次都一样)
把代码重新改一下,结果和上面一样的,换一张图可能会看的比较清楚




留言
張貼留言