【TensorFlow动手玩】队列

本文介绍了TensorFlow中的队列机制,包括FIFOQueue和RandomShuffleQueue的创建与操作,讲解了队列阻塞条件及QueueRunner的使用,讨论了如何控制入队操作以确保数据的正确读取,并通过Coordinator管理和处理异常,提供了一个完整的数据读取流程示例。
摘要由CSDN通过智能技术生成

引子

队列(queue)是TensorFlow中的重要组成部件。所有队列管理器被默认加入图的tf.GraphKeys.QUEUE_RUNNERS集合中。

读入数据的这个例子中,可以在构建完图之后,打印出图中队列的相关信息:

queue_runners = tf.get_collection(tf.GraphKeys.QUEUE_RUNNERS)
for qr in queue_runners:
    print(type(qr.queue))
    print(qr.queue.name)
    for opt in qr.enqueue_ops:
        print(type(opt))
        print(opt.name)

这个例子中,出现了两个QueueRunner:第一个由tf.train.string_input_produecer函数创建,负责管理数据文件名;第二个由tf.train.shuffle_batch函数创建,负责管理样本。

每个队列管理器拥有一个queue:可以是先进先出的(FIFOQueue),或者随机的(RandomShuffleQueue)。

每个队列管理器还有用一个enqueue_ops列表,装有入队操作。第一个队列管理器只有一个入队操作;第二个队列管理器,由于设置num_threads=2,有两个线程向样本队列中添加。

这里写图片描述

使用样本时,从第二个队列中执行出队操作。

接下来,我们用最简单的例子展示TensorFlow的队列机制。

Queue

队列本身也是图中的一个节点
其他节点(enqueue, dequeue)可以修改队列节点中的内容。

FIFOQue

创建一个先进先出队列,以及一个“出队,+1,入队”操作:

q = tf.FIFOQueue(3, "float")
x = q.dequeue()
y = x+1
q_inc = q.enqueue([y])

初始化并执行2次这个操作,之后查看队列内容

sess = tf.Session()
sess.run(q.enqueue_many(([0.1, 0.2, 0.3]),))
for i in range(0,2):
    sess.run(q_inc)

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值