Tensorflow多线程输入数据处理框架——队列

一、队列

在Tensorflow中,队列不仅是一种数据结构,也是多线程输入数据处理框架的基础。队列和变量类似,都是计算图上有状态的节点,其他节点可以修改它的内容,对于变量,可以通过赋值操作改变变量的取值。对于队列,其他节点可以把新元素插入到队列后端,也可以把队列前端的元素删除,修改队列状态的操作主要有Enqueue(进队列)、EnqueueMany()、Dequeue(出队列)。在使用队列前需要明确调用初始化过程。

Tensorflow提供了FIFOQueue(先进先出)和RandomShuffleQueue(随机)两种队列,其中RandomShuffleQueue每次出队操作得到的是队列内所有元素中随机选择的一个。

实例代码:

import tensorflow as tf
q = tf.RandomShuffleQueue(capacity=10,min_after_dequeue=2,dtypes='float32')
#创建一个随机队列,最大长度为10,出队后的最小长度为2,数据类型为float32
with tf.Session() as sess :
    for i in range(0,10):
        sess.run(q.enqueue(i))
    #在输出8次后被阻塞
    for i in range(0,8):
        print(sess.run(q.dequeue()))

Tensorflow提供了tf.Coordinator和tf.QueueRuner两个类来完成多线程协同的功能,tf.Coordinator主要用于协同多个线程一起停止,并提供了should_stop、request_stop和join三个函数,在启动线程前,首先需要声明一个tf.Coordinator类,并将这个类传入每一个创建的线程中。启动的线程需要一直查询should_stop函数,当返回值为True时,当前的线程也需要退出。每一个启动的线程都可以通过调用request_stop函数来通知其他线程退出,当某一个线程调用request_stop函数之后,should_stop函数的返回值将被设置为True,这样其他的线程就可以同时终止了。

实例代码:

import tensorflow as tf
import numpy as np
import threading 
import
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值