Tensorflow数据API-预取

Tensorflow数据API-预取,tensorflow,prefetch,tensorflow-datasets,Tensorflow,Prefetch,Tensorflow Datasets,我正在尝试使用TF的新功能,即数据API,我不确定预取如何工作。在下面的代码中 def dataset_input_fn(...) dataset = tf.data.TFRecordDataset(filenames, compression_type="ZLIB") dataset = dataset.map(lambda x:parser(...)) dataset = dataset.map(lambda x,y: image_augmentation(...)

我正在尝试使用TF的新功能,即数据API,我不确定预取如何工作。在下面的代码中

def dataset_input_fn(...)
    dataset = tf.data.TFRecordDataset(filenames, compression_type="ZLIB")
    dataset = dataset.map(lambda x:parser(...))
    dataset = dataset.map(lambda x,y: image_augmentation(...)
                      , num_parallel_calls=num_threads
                     )

    dataset = dataset.shuffle(buffer_size)
    dataset = dataset.batch(batch_size)    
    dataset = dataset.repeat(num_epochs)
    iterator = dataset.make_one_shot_iterator()
我放置的
dataset=dataset.prefetch(批大小)
上的每一行之间有关系吗?或者,如果数据集来自
tf.contrib.data

在关于的讨论中,我发现mrry的一条评论:

请注意,在TF1.4中,将有一个Dataset.prefetch()方法 使在管道中的任意点添加预取变得更容易,而不是 就在映射()之后。(您可以通过每晚下载当前的 建造)

例如,Dataset.prefetch()将启动一个后台线程 填充一个类似于tf.FIFOQueue的有序缓冲区,以便 下游管道级无需堵塞。但是,预回迁() 实现要简单得多,因为它不需要支持 许多不同的并发操作作为tf.FIFOQueue

因此,这意味着预取可以由任何命令执行,并且可以在前一个命令上运行。到目前为止,我注意到最大的性能提升是将其放在最后

还有一个关于mrry在何处解释了更多关于预取和缓冲区的讨论

更新2018/10/01

从1.7.0版开始,数据集API(在contrib中)有一个选项,可以
预取\u到\u设备
。请注意,此转换必须是管道中的最后一个转换,当TF2.0到达时,contrib将消失。要在多个GPU上进行预取工作,请使用
多设备迭代器
(示例请参阅)


它是预取到gpu内存还是cpu内存?我在任何地方都找不到答案。。。