我是Python和Tensorflow的初学者。当我学习Tensorflow的线程和队列部分时,我有点困惑。
因此,当我们使用多线程(由QueueRunner生成)从数据源中排队一个队列时,排队顺序是什么?队列中的数据是否会保留数据源中的原始顺序?如果是这样,如何用多线程实现这一点?如果没有,为什么我们需要RandomShuffleQueue(如果排队顺序没有修复,那么将出列顺序洗牌似乎有点多余)?
提前谢谢。
答案 0 :(得分:0)
首先,你应该不再使用队列/队列运行器作为输入管道。请改用Datasets API。您应该发现它更直观,更简单。
回答你的问题:
Re:那么当我们使用多线程(由QueueRunner生成)从数据源中排队一个队列时,排队顺序是什么?
订单未定义。这取决于线程调度。
Re:队列中的数据会保留数据源中的原始订单吗?
数据源通常是一组文件,通常给定的文件由单个线程和单个读取器处理。如果是这种情况,将保留来自一个文件的示例顺序(除非您有意改组它们,例如使用RandomShuffleQueue而不是FIFOQueue)
Re:为什么我们需要RandomShuffleQueue?
在上面的常见情况中,如果您没有随机播放示例,则会保留其顺序。您可能希望将示例随机播放以进行培训,因为它们可能会遵循文件中的某些顺序。此外,虽然跨文件的顺序不是确定性的,但它远非均匀随机。您可能希望在整个数据集中实现(一个很好的近似)均匀随机顺序。