Python tensorflow数据集api中洗牌缓冲区大小的优化

Python tensorflow数据集api中洗牌缓冲区大小的优化,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,我试图使用datasetapi来加载数据,并发现我花费了大部分时间将数据加载到shuffle缓冲区。如何优化此管道,以最大限度地减少填充洗牌缓冲区所花费的时间 (tf.data.Dataset.list_files(path) .shuffle(num_files) # number of tfrecord files .apply(tf.contrib.data.parallel_interleave(lambda f: tf.data.TFRecordDataset(f),

我试图使用
dataset
api来加载数据,并发现我花费了大部分时间将数据加载到shuffle缓冲区。如何优化此管道,以最大限度地减少填充洗牌缓冲区所花费的时间

(tf.data.Dataset.list_files(path)
   .shuffle(num_files)  # number of tfrecord files 
   .apply(tf.contrib.data.parallel_interleave(lambda f: tf.data.TFRecordDataset(f), cycle_length=num_files))
   .shuffle(num_items)  # number of images in the dataset
   .map(parse_func, num_parallel_calls=8)
   .map(get_patches, num_parallel_calls=8)
   .apply(tf.contrib.data.unbatch())
   # Patch buffer is currently the number of patches extracted per image
   .apply(tf.contrib.data.shuffle_and_repeat(patch_buffer))
   .batch(64)
   .prefetch(1)
   .make_one_shot_iterator())

因为我最多有数千个图像,所以我解决这个问题的方法是每个图像有一个单独的tfrecord文件。这样一来,单个图像就可以被洗牌,而不必先将它们加载到内存中。这大大减少了需要进行的缓冲。

您不需要洗牌文件名本身
shuffle
是一个用于列出_文件的参数,默认为True。请在此处阅读: