关于队列的相关知识,盗用一张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 '''