我有一个用于训练CNN的数据生成器并且工作正常。现在,我想通过cifar10_multi_gpu_train.py加速2 GPU(1台)的培训。 (https://www.tensorflow.org/programmers_guide/threading_and_queues)
问题:
1)如何将数据生成器转换为队列?数据项:(图像文件目录,输出)。整个数据集:数据项列表。批量数据集:部分整个数据集。如何将它放入如下的张量中:
batch_queue = tf.contrib.slim.prefetch_queue.prefetch_queue(
[images, labels], capacity=2 * FLAGS.num_gpus)
2)队列的内容是什么?
1.a)队列采用整个数据集还是单批量数据集?
1.b)在我看来,在cifar10样本中,队列是1批。但是,它如何在所有数据集中循环?
1.c)如果队列占用整个数据集,那么gpu的每个线程中的数据是什么?在这种情况下,我不确定我是如何理解并发GPU训练的,因为用于计算损失和梯度的每个数据集都取决于相同的模型状态。但是,只有在完成最后一次修改模型权重之后,才能进行下一次丢失+下一个数据集计算的梯度。