gpt4 book ai didi

tensorflow - Tensorflow Data API-预取

转载 作者:行者123 更新时间:2023-12-04 00:58:03 26 4
gpt4 key购买 nike

我正在尝试使用TF的新功能,即Data 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(batch_size)上方的每一行之间有关系吗?或者,如果数据集来自 output_buffer_size,那么应该是在每次使用 tf.contrib.data的操作之后?

最佳答案

在关于github的讨论中,我发现了mrry的评论:


请注意,在TF 1.4中,将有一个Dataset.prefetch()方法
使在管道中的任何位置添加预取变得更容易,而不是
就在map()之后。 (您可以通过下载当前的每晚
建立。)





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


因此,这意味着可以通过任何命令进行预取,并且可以在前一个命令上使用。到目前为止,我注意到仅将其放在最末即可获得最大的性能提升。

Meaning of buffer_size in Dataset.map , Dataset.prefetch and Dataset.shuffle上还有另外一个讨论,其中mrry解释了有关预取和缓冲区的更多信息。

更新2018/10/01:

从1.7.0版开始,Dataset API(有帮助)具有prefetch_to_device选项。请注意,此转换必须是管道中的最后一个转换,并且当TF 2.0到达时,contrib将消失。要在多个GPU上进行预取,请使用MultiDeviceIterator(示例请参见#13610multi_device_iterator_ops.py

https://www.tensorflow.org/versions/master/api_docs/python/tf/contrib/data/prefetch_to_device

关于tensorflow - Tensorflow Data API-预取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47064693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com