關於隊列的相關知識,盜用一張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.] '''

#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 '''