我使用Tensorflow来学习MNIST数据。 对于批处理,我从单个图像创建批处理,如下所示:
BatchedInputs = list(tf.train.batch(
Inputs,
batch_size=BatchSize,
num_threads=self._PreprocessThreads,
capacity=self._MinimumSamplesInQueue + 3 * BatchSize))
当我创建(用于测试)批量为1的批次并在TensorBoard中查看这些图像时,我可以看到,并非每次运行时,每个图像都像其他运行一样。 它们不会直接改组,但有时会包含其他图像。
我希望从该操作获得确定性输出,但事实并非如此。也许我做错了什么(开始排队错误或类似的东西)?
答案 0 :(得分:6)
如果在调用tf.train.batch()
时设置num_threads > 1
,则生成的程序将是非确定性的,因为这将创建三个未经协调的预取线程,用于评估Input
并将下一个元素插入到队列。由于预取线程不协调,因此这些线程之间存在争用以使队列中的元素入队,这导致队列元素顺序的非确定性。
设置num_threads = 1
应该使程序的这一部分具有确定性,假设程序的其他部分是确定性的。但是,这是一个弱保证,特别是在基于队列的输入例程中使用混洗会使程序不确定。