Tensorflow在预处理过程中对数据进行两次洗牌

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

在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)
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
    不兼容。