tf.train.batch输出不确定

Cou*_*unt 2 tensorflow

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

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

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

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

mrr*_*rry 6

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

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