tf.Dataset随机/过滤/重复最佳组合

时间:2018-06-29 22:46:18

标签: tensorflow keras deep-learning dataflow tensorflow-datasets

因此,我正在尝试找到将shufflefilterrepeat运算符与tf.Dataset,tf.eager和Keras模型子类化(TF 1.9+ )。 考虑以下代码:

bunch_of_images_len = len(bunch_of_images_path) # Size 100

tf.data.Dataset.from_tensor_slices(bunch_of_images_path)
    .shuffle(buffer_size=bunch_of_images_len, reshuffle_each_iteration=False)
    .map(load_image_from_disk)
    .filter(something)
    .batch(batch_size)
    .repeat()

现在,让我们想象一下该数据集经历了一个纪元,而不是产生100张图像,而是由于filter()操作而产生了90张图像。将会发生的情况是,一旦产生了90张图像,repeat()操作将被激活,而shuffle()操作将重新启动数据流,为当前的10张剩余图像分配大小为100的缓冲区时代。 问题是:随机播放操作确实要花费很多时间,如果滤镜过滤出很多图像,那么shuffle操作可以在一个时期内重复执行4、5、6次。希望它发生一次!

我还必须在进行shuffle操作之前进行filter操作,否则重新排列会重新排列实际的图像(而不是图像路径)并且会占用大量RAM

所以我的问题是:如何获得一个改组后的缓冲区,如果该时期没有完成,它不会重新改组数据,而是重用它已经改组后的数据。考虑一下:

  • 我不知道通过filter操作将丢弃多少张图像
  • 我尝试了reshuffle_each_iteration=False的Keras模型子类化,但这没用。

谢谢。

0 个答案:

没有答案