Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow:如何使用;新";带有QueueRunner的数据集API_Python_Tensorflow_Dataset - Fatal编程技术网

Python Tensorflow:如何使用;新";带有QueueRunner的数据集API

Python Tensorflow:如何使用;新";带有QueueRunner的数据集API,python,tensorflow,dataset,Python,Tensorflow,Dataset,基本上我有一个要处理的图像列表。 在加载之后,我需要做一些预处理(数据增强),然后将数据馈送到TF的主图。 目前,我正在使用一个定制的生成器,它获取路径列表,生成一对张量(图像),并通过占位符馈送到网络。顺序处理每批约需0.5秒 我只需从_generator()函数中读取数据集API,我可以直接使用.get_next()作为输入 但是QueueRunner如何适应框架?Dataset是否隐式地利用queue+dequeue来维护它的生成器/get_next管道,或者它需要我在之后显式地输入FIF

基本上我有一个要处理的图像列表。 在加载之后,我需要做一些预处理(数据增强),然后将数据馈送到TF的主图。 目前,我正在使用一个定制的生成器,它获取路径列表,生成一对张量(图像),并通过占位符馈送到网络。顺序处理每批约需0.5秒

我只需从_generator()函数中读取
数据集
API,我可以直接使用
.get_next()
作为输入


但是
QueueRunner
如何适应框架?
Dataset
是否隐式地利用
queue
+
dequeue
来维护它的
生成器/get_next
管道,或者它需要我在之后显式地输入
FIFOQueue
?如果答案是后者,那么维护管道以训练并验证多个
random\u shuffle
epoch的最佳实践是什么?(我的意思是,我需要维护多少个
DS/queueRunner
,在哪里设置洗牌和历元?

如果使用Dataset API,则不必使用queueRunner来拥有队列/缓冲区。可以使用Dataset API创建队列/缓冲区,同时预处理数据和训练网络。如果有数据集,则可以使用或创建队列/缓冲区

有关更多信息,请参阅

以下是在CPU上使用预取缓冲区进行预处理的示例:

 NUM_THREADS = 8
 BUFFER_SIZE = 100

 data = ...
 labels = ...
 inputs = (data, labels)

 def pre_processing(data_, labels_):
     with tf.device("/cpu:0"):
         # do some pre-processing here
         return data_, labels_

 dataset_source = tf.data.Dataset.from_tensor_slices(inputs)
 dataset = dataset_source.map(pre_processing, num_parallel_calls=NUM_THREADS)

 dataset = dataset.repeat(1)  # repeats for one epoch
 dataset = dataset.prefetch(BUFFER_SIZE)

 iterator = tf.data.Iterator.from_structure(dataset.output_types,
                                            dataset.output_shapes)
 next_element = iterator.get_next()
 init_op = iterator.make_initializer(dataset)

 with tf.Session() as sess:
     sess.run(init_op)
     while True:
         try:
             sess.run(next_element)
         except tf.errors.OutOfRangeError:
             break

对于培训,我创建了两个数据集:一个用于培训,一个用于验证。您可以使用Dataset API设置历代并洗牌数据。我从不需要使用QueueRunner。我希望利用QueueRunner同时处理数据(cpu)和训练网络(gpu),以隐藏cpu时间。单靠数据集似乎无法做到这一点,还是这样?