tf.train.batch输出不确定

时间:2017-04-25 13:41:19

标签: tensorflow

我使用Tensorflow来学习MNIST数据。 对于批处理,我从单个图像创建批处理,如下所示:

BatchedInputs = list(tf.train.batch(
  Inputs,
  batch_size=BatchSize,
  num_threads=self._PreprocessThreads,
  capacity=self._MinimumSamplesInQueue + 3 * BatchSize))

当我创建(用于测试)批量为1的批次并在TensorBoard中查看这些图像时,我可以看到,并非每次运行时,每个图像都像其他运行一样。 它们不会直接改组,但有时会包含其他图像。

我希望从该操作获得确定性输出,但事实并非如此。也许我做错了什么(开始排队错误或类似的东西)?

1 个答案:

答案 0 :(得分:6)

如果在调用tf.train.batch()时设置num_threads > 1,则生成的程序将是非确定性的,因为这将创建三个未经协调的预取线程,用于评估Input并将下一个元素插入到队列。由于预取线程不协调,因此这些线程之间存在争用以使队列中的元素入队,这导致队列元素顺序的非确定性。

设置num_threads = 1应该使程序的这一部分具有确定性,假设程序的其他部分是确定性的。但是,这是一个弱保证,特别是在基于队列的输入例程中使用混洗会使程序不确定。