• 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
  • 相关阅读:
    急招.NET系列职位
    程序员成长的三个方法
    xwebkitspeech
    张小龙的产品
    浅析商业银行“业务连续性管理体系”的构建
    Sonar for dotNet
    Moles测试Contrustor时候遇到的一个问题
    EntityFramework 用Moles的mock
    Accessor中Generic的元素是internal/private的会导致转换失败的异常
    Android自用Intent 介绍
  • 原文地址:https://www.cnblogs.com/liuhuacai/p/11699180.html
Copyright © 2020-2023  润新知