所以我找到了“如何修复”的部分,但没有找到原因。
似乎第一个排队/出列必须在第二个排队/出列放入queue\u runners集合之前运行,但是有一个警告,我们需要运行
sess.run(data_.initializer)
两次:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(nq_init, feed_dict={init:data0})
sess.run(data_.initializer)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for n in range(10):
print(sess.run(data2))
sess.run(data_.initializer)
sess.run(data_.initializer)
coord.request_stop()
coord.join(threads)
产出如预期:
[2]; [6]; [42];...
如果没有这两个电话,我会得到以下信息:
[2]; [6]; [6]; [42];...
我怀疑
q.enqueue
有自己的缓冲区来保存旧的
data2
,所以必须调用两次。这也适用于第一个值不重复,因为此时第二个值
排队
仍然是空的。不知道如何克服这个怪癖。