tensorflow隊列tf.FIFOQueue | enqueue | enqueue_many | dequeue | dequeue_many


關於隊列的相關知識,盜用一張https://blog.csdn.net/HowardWood/article/details/79406891的動態圖

import tensorflow as tf
import time
#
q = tf.FIFOQueue(3,'float')                   ###創建先入先出的隊列
init = q.enqueue_many([[0.,0.,0.],])          ###[[0.,0.,0.],]的第0個以及元素為[0.,0.,0.],將[0.,0.,0.]的元素連入隊
x = q.dequeue()                               ###出列一個元素
y = x+1                                       
q_inc = q.enqueue([y])                        ###單個數列[y]入隊
with tf.Session() as sess:                    ###開啟會話執行以上定義的操作
    init.run()                                ###初始化列隊(列隊中加入3個0)
    for _ in range(10):                       ###出列  入列 循環操作
        v,_ = sess.run([x,q_inc])             ###執行x = q.dequeue  出列    空出一個位置,執行入列 q.enqueue([y])
        time.sleep(2)
        print(v)                  
        # print(_)
'''
0.0
0.0
0.0
1.0
1.0
1.0
2.0
2.0
2.0
3.0
'''
動態圖代碼復現
 
        

###[[3.,2.,1.],[11.,22.,33.],[111.,222.,333.]]的第一個一級元素[3.,2.,1.]入隊

# ###張量(數組)
input_data = [[3.,2.,1.],[11.,22.,33.],[111.,222.,333.]]
##創建一個先入先出隊列
q = tf.FIFOQueue(3,dtypes=[tf.float32])
###入隊---一次入隊一個張量
init=q.enqueue(input_data)
###出隊----一次出隊一個張量
output_data = q.dequeue()
with tf.Session() as sess:
    ###入隊操作3次(如果四次入隊,而創建的隊列長度為3,在入隊3次后,沒有出隊操作,入隊操作將會被阻止)
    init.run()
    init.run()
    init.run()
    ##出隊操作3次(如果隊列里面沒有數據,操作會被阻止,直到隊列里面有一個數字)
    print('1:',sess.run(output_data))
    print('2:', sess.run(output_data))
    print('3:', sess.run(output_data))
    sess.run(q.close(cancel_pending_enqueues=True))
    print(sess.run(q.is_closed()))
'''
輸出:
1: [ 3.  2.  1.]
2: [ 3.  2.  1.]
3: [ 3.  2.  1.]
'''
enqueue and dequeue
#1.隊列中元素的個數,小於出隊操作的次數  ---   程序會被阻止(暫停等待),直到有隊列中有元素
# ###張量(數組)
input_data = [[3.,2.,1.],[11.,22.,33.],[111.,222.,333.]]
##創建一個先入先出隊列
q = tf.FIFOQueue(3,dtypes=[tf.float32])
###入隊---一次入隊一個張量
init=q.enqueue(input_data)
###出隊----一次出隊一個張量
output_data = q.dequeue()
with tf.Session() as sess:
    ###入隊操作3次(如果四次入隊,而創建的隊列長度為3,在入隊3次后,沒有出隊操作,入隊操作將會被阻止)
    init.run()
    init.run()
    # init.run()   只執行了兩次入隊操作,隊列中有兩個元素
    
    print('1:',sess.run(output_data))
    print('2:', sess.run(output_data))
    print('3:', sess.run(output_data))  ##出隊操作3次(如果隊列里面沒有數據,操作會被阻止,直到隊列里面有一個數字)
    sess.run(q.close(cancel_pending_enqueues=True))
    print(sess.run(q.is_closed()))
'''
輸出:
1: [ 3.  2.  1.]
2: [ 3.  2.  1.]
之后等待
'''
異常

 

 

 

##將數組的第一個以及元素的以及元素作為分別的元素,一次入隊n個

input_data=[[3.,2.,1.],[11.,22.,33.],[111.,222.,333.]]
print(tf.shape(input_data))
q=tf.FIFOQueue(3,dtypes=[tf.float32],shapes=[[]])
init=q.enqueue_many(input_data)
output_data=q.dequeue()
with tf.Session() as sess:
    init.run()  ##入隊一次(3個元素)
    print('1:',sess.run(output_data))
    print('2:',sess.run(output_data))
    print('3:',sess.run(output_data))
    sess.run(q.close(cancel_pending_enqueues=True))
    print(sess.run(q.is_closed()))
'''
1: 3.0
2: 2.0
3: 1.0
True
'''
enqueue_many and dequeue

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM