Tensorflow tf.train.batch输出不确定
我正在使用Tensorflow学习MNIST数据。 对于批处理,我从单个图像创建一个批处理,如下所示:Tensorflow tf.train.batch输出不确定,tensorflow,Tensorflow,我正在使用Tensorflow学习MNIST数据。 对于批处理,我从单个图像创建一个批处理,如下所示: BatchedInputs = list(tf.train.batch( Inputs, batch_size=BatchSize, num_threads=self._PreprocessThreads, capacity=self._MinimumSamplesInQueue + 3 * BatchSize)) 当我创建(用于测试)大小为1的批并在TensorBoard中
BatchedInputs = list(tf.train.batch(
Inputs,
batch_size=BatchSize,
num_threads=self._PreprocessThreads,
capacity=self._MinimumSamplesInQueue + 3 * BatchSize))
当我创建(用于测试)大小为1的批并在TensorBoard中查看这些图像时,我可以看到,并非每次运行时,每个图像都与其他运行中的图像相同。
它们不会被直接洗牌,但有时会包含另一个图像
我希望从该操作中获得确定性输出,但事实并非如此。也许我做错了什么事(开始排队出错或类似的事情) 如果在调用时设置
num_threads>1
,则生成的程序将是不确定的,因为这将创建三个不协调的预取线程,这些线程计算输入
,并将下一个元素插入队列。由于预取线程是不协调的,因此这些线程之间存在将队列中的元素排队的竞争,这导致队列元素顺序的不确定性
设置
num_threads=1
应该使程序的这一部分具有确定性,假设程序的其他部分具有确定性。然而,这是一个很弱的保证,尤其是在基于队列的输入例程中使用洗牌会使程序变得不确定。另一个注意:当我不批处理数据,而只是向我的网络提供列表输入时,输入数据在所有运行中都是确定的。实际上,我使用8线程进行预取。将数字减少到1将解决此问题!谢谢你清楚的解释。