【发布时间】:2016-01-25 19:47:40
【问题描述】:
我使用tf.train.string_input_producer 设置了一个文件名生成队列,其中shuffle 选项设置为False,与使用tf.train.batch 的批处理队列耦合(即非洗牌)。查看正在阅读的示例列表,虽然顺序几乎完全保留,但并非严格如此。例如前几个样本是 4, 2, 1, 3, 5, 6, 7, 8, 9, 11, 10, ...,其中数字对应于样本在读取的第一个文件中的位置。在那之后,几百个样本的排序几乎是完美的,但它偶尔会切换相邻的样本。这是预期的行为吗?是否有某种方法可以强制保留顺序,这样就不必跟踪何时读取了什么文件等?
我应该说我有条件地丢弃一些样本,方法是一次将 0 个或 1 个样本加入队列,并在批处理队列中将 enqueue_many 设置为 True。然而,上面的示例都没有被跳过,因此原则上这不应该是一个问题。
【问题讨论】:
-
这不是预期的。您是否为 tf.batch 使用了多个线程?那将给出随机顺序。另一个不确定性问题(这里似乎不是这种情况,因为没有丢失任何元素)——主管+汇总统计信息还可以通过每隔一段时间消耗队列中的元素来添加不确定性
-
我确实有多个线程正在运行,因此可以解释它。设置为一个线程似乎确实消除了这种行为,但它并不是完全可重现的,因此很难确定。
标签: tensorflow