2017-07-01 105 views
1

我想測試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。

+0

你的代碼是完全正常的,它工作正常 –

回答

0

你的代碼是好的,它工作正常。可能會出現這種情況,當你運行代碼時,你會得到幾次相同的輸出。這是可能的。

我跑你的代碼,並作了一些修改它,下面的代碼是工作的罰款對我來說:

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()) 
    for i in range(3): 
     print(sess.run([q.size(), ass_op, enq_op])) 
    for i in range(2): 
     print(sess.run([q.size(), deq_op])) 

輸出:

[0, 1.0, None] 
[1, 2.0, None] 
[2, 3.0, None] 
[3, 1.0] 
[2, 3.0] 
-- 
[0, 1.0, None] 
[1, 2.0, None] 
[2, 3.0, None] 
[3, 3.0] 
[2, 2.0] 
+0

其實,我發現這個問題只出現在Mac OS中。當我用linux和windows測試代碼時,它工作正常。 –

0

它看起來對我說,你要添加相同的元素到你的隊列(問題與你分配部分)。

這裏是一個隨機隊列其中隨機抽取元素:

import tensorflow as tf 

q = tf.RandomShuffleQueue(10, min_after_dequeue=1, dtypes=tf.float32) 
init = q.enqueue_many(([1., 2., 3., 4., 5., 6., 7.],)) 
res = q.dequeue() 
with tf.Session() as sess: 
    sess.run(init) 
    for i in xrange(5): 
     print sess.run(res) 
相關問題