我想測試TensorFlow中的RandomShuffleQueue。隊列首先排隊三次,值增加1.0的變量,所以隊列應該像[1.,2.,3。],然後出隊兩次。我預計輸出將隨機從1,2,3中選擇,但它總是輸出3,這很混亂。爲什麼TensorFlow中的RandomShuffleQueue保持相同的值不一致?
的測試代碼顯示如下:
import tensorflow as tf
i = tf.Variable(0.0)
one = tf.constant(1.0)
ass_op = tf.assign(i, tf.add(i, one))
q = tf.RandomShuffleQueue(10, min_after_dequeue=1, dtypes=tf.float32)
enq_op = q.enqueue([ass_op])
deq_op = q.dequeue()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run([q.size(), ass_op, enq_op]))
print(sess.run([q.size(), ass_op, enq_op]))
print(sess.run([q.size(), ass_op, enq_op]))
print(sess.run([q.size(), deq_op]))
print(sess.run([q.size(), deq_op]))
,輸出是:
[0, 1.0, None]
[1, 2.0, None]
[2, 3.0, None]
[3, 3.0]
[2, 3.0]
更新: 我發現這個問題只出現在Mac OS中,而在Linux和Windows的測試按我的預期正常工作。而且,FIFOQueue也有同樣的問題。更詳細的測試代碼如下:
import tensorflow as tf
i = tf.Variable(0.0)
ass_op = tf.assign(i, i+1.0)
q = tf.FIFOQueue(20, dtypes=tf.float32)
enq_op = q.enqueue([ass_op])
deq_op = q.dequeue()
sess = tf.Session()
sess.run(tf.global_variables_initializer())
# code 1
for i in range(10):
sess.run(enq_op)
for i in range(10):
print(sess.run(deq_op))
# code 2
for i in range(10):
sess.run(enq_op)
print(sess.run(deq_op))
而代碼2個按預期工作,碼1出錯的僅適用於Mac OS。
你的代碼是完全正常的,它工作正常 –