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
原文地址:https://www.cnblogs.com/liuhuacai/p/11699180.html