批处理队列 (tf.train.batch) 是否不保留顺序?

Does batching queue (tf.train.batch) not preserve order?

我已经使用 tf.train.string_input_producer 设置了一个文件名生成队列,并将 shuffle 选项设置为 False,并使用 tf.train.batch 耦合到一个批处理队列(即非洗牌)。查看正在阅读的示例列表,虽然顺序 almost 完美保留,但严格来说并非如此。例如,前几个样本是 4, 2, 1, 3, 5, 6, 7, 8, 9, 11, 10, ...,其中数字对应于样本在读取的第一个文件中的位置。在那之后,数百个样本的排序几乎是完美的,但它偶尔会切换相邻的样本。这是预期的行为吗?有没有什么方法可以强制保留顺序,这样就不必跟踪什么时候读取了什么文件等等?

我应该说我有条件地丢弃一些样本,方法是一次将 0 个或 1 个样本放入队列,并在批处理队列中将 enqueue_many 设置为 True。 None 以上示例被跳过,因此原则上这不应该成为问题。

正如 Yaroslav 在评论中提到的,单线程就可以解决问题。除了单线程之外,您还应该设置 num_epochs = 1。如果您不这样做,它将继续生产批次,并且看起来顺序没有保留,因为它再次从头开始循环。我希望这有效。

话虽如此,但我希望有人能想出更好的答案来解决这个问题!