Tensorflow在预处理过程中对数据进行两次洗牌
在TensorFlow负载图像中,作者在使用tf.data时似乎将数据洗牌两次:Tensorflow在预处理过程中对数据进行两次洗牌,tensorflow,tensorflow-datasets,Tensorflow,Tensorflow Datasets,在TensorFlow负载图像中,作者在使用tf.data时似乎将数据洗牌两次: list_ds = tf.data.Dataset.list_files(str(data_dir/'*/*'), shuffle=False) list_ds = list_ds.shuffle(image_count, reshuffle_each_iteration=False) # <-- first shuffling val_size = int(image_count * 0.2) trai
list_ds = tf.data.Dataset.list_files(str(data_dir/'*/*'), shuffle=False)
list_ds = list_ds.shuffle(image_count, reshuffle_each_iteration=False) # <-- first shuffling
val_size = int(image_count * 0.2)
train_ds = list_ds.skip(val_size)
val_ds = list_ds.take(val_size)
...
def configure_for_performance(ds):
ds = ds.cache()
ds = ds.shuffle(buffer_size=1000) # <-- second shuffling
ds = ds.batch(batch_size)
ds = ds.prefetch(buffer_size=AUTOTUNE)
return ds
train_ds = configure_for_performance(train_ds)
val_ds = configure_for_performance(val_ds)
list_ds=tf.data.Dataset.list_文件(str(data_dir/'*/*')、shuffle=False)
list_ds=list_ds.shuffle(image_count,reshuffle_each_iteration=False)#它们由于不同的原因进行了两次洗牌:
第一次洗牌是获得洗牌和一致的槽历元序列/验证分割
第二个洗牌是在每个历元洗牌火车数据集
解释:
shuffle
方法在每次迭代中都有一个特定的参数reshuffle\u
,默认为True
。这意味着每当数据集耗尽时,整个数据集都会被重新洗牌。如果在调用shuffle
后将一个数据集拆分为两个(以获得随机拆分),则当数据集耗尽时,整个数据集将在拆分之前重新洗牌。然后将列车组和验证组混合在一起。因此,要得到一个随机的分割,但在不同的时期之间保持一致,可以使用reshuffle\u each\u iteration=False进行洗牌
然后,对于训练集,最好在每个历元中以不同的顺序向模型提供数据,从而调用第二次洗牌
对于您的第二个问题,tf.data.AUTOTUNE
与shuffle
不兼容,感谢您的深入了解。你碰巧也知道我的第二个问题吗?我没有回答那个问题,因为在一个问题上问多个问题是不好的做法。但是答案很简单,shuffle
与tf.data.AUTOTUNE
不兼容。