RandomShuffleQueue
一、几个函数
- RandomShuffleQueue类
__init__(self, capacity, min_after_dequeue,dtypes, shapes=None,names=None, seed=None, shared_name=None, name="random_shuffle_queue")
queue = tf.RandomShuffleQueue(...):创建一个queue,按随机顺序进行dequeue
RandomShuffleQueue有一定的容量限制capacity,支持多个生产者和消费者
RandomShuffleQueue中的每个元素是固定长度的tensor 元组,数据类型由dtypes定义,形状为shapes。如果shapes没有定义,那么不同的queue元素可能有不同的形状,此时就不能使用dqueue_many。如果shapes定义了,则所有的元素必须有相同的形状
min_after_dequeue决定queue在dequeue以后要保持的元素个数,如果没有足够的元素,就会block住dequeue的相关操作,直到有足够元素进来。当queue关闭,则这个参数被忽略
- enqueue(self, vals, name=None)
enqueue_op = queue.enqueue(...) 创建enqueue元素到queue中的操作
如果操作执行时queue是满的,则会block住
vals是一个tensor或一个tensor的list/tuple,或者是一个字典,它相当于enqueue操作时的数据池
enqueue操作是要手动触发的,也就是不是说像一般的那种计算,会把enqueue作为依赖操作被执行
- queue.dequeue(self, name=None)
从queue中取出一个元素
- Coordinator类
__init__(self, clean_stop_exception_types=None)
coord = tf.Coordinator() 协调线程的执行
- QueueRunner类
__init__(self, queue=None, enqueue_ops=None, close_op=None, cancel_op=None, queue_closed_exception_types=None,queue_runner_def=None, import_scope=None)
说明
qr = tf.train.QueueRunner(...) 为一个queue保持一系列enqueue操作,每个操作以一个线程执行
queue: a Queue
enqueue_ops: 一个enqueue ops列表
close_op: 指定关闭queue的操作
cancel_op:指定关闭以及取消挂起的enqueue ops的操作
- qr.create_threads(self, sess, coord=None, daemon=False, start=False)
为给定的sess创建多个线程以执行enqueue ops
start:如果为False,则需要手动调用 start()来启动
- start_queue_runners
start_queue_runners(sess=None, coord=None, daemon=True, start=True, collection=ops.GraphKeys.QUEUE_RUNNERS)
tf.train.start_queue_runners(...) 启动图中所有的queue runners,与add_queue_runner()配合使用
start: `False`只是创建线程,但是没有启动
二、实例
def example1(): """
最简单的例子,只使用enqueue和dequeue
:return:
"""
example = tf.constant(2, "float32", [2, 2])
# 创建一个queue
# tf.RandomShuffleQueue(capacity,: queue的容量
# min_after_dequeue, : 保证queue中最少的个数
# dtypes,
# shapes=None,...)
queue = tf.RandomShuffleQueue(10, 0, "float32", shapes=[2, 2])
# 为queue添加enqueue操作
enqueue_op = queue.enqueue(example)
# 为queue添加dequeue操作
inputs = queue.dequeue()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(enqueue_op)
print(sess.run(inputs))
def example2():
"""
使用queue runner来管理多个enqueue线程,用coord来关闭线程
:return:
"""
data = tf.constant(2, "float32", [2, 2])
example = [data, data, data, data, data, data, data, data]
queue = tf.RandomShuffleQueue(10, 0, "float32", shapes=[2, 2])
enqueue_op = queue.enqueue(example) qr = tf.train.QueueRunner(queue, [enqueue_op] * 4)
coord = tf.train.Coordinator() inputs = queue.dequeue()
with tf.Session() as sess:
threads = qr.create_threads(sess, coord, start=True)
sess.run(tf.global_variables_initializer())
print(sess.run(inputs))
# 用coord来停止所有的enqueu线程
coord.request_stop()
coord.join(threads)
RandomShuffleQueue的更多相关文章
- 【err】tensorflow.python.framework.errors_impl.OutOfRangeError: RandomShuffleQueue
problem Traceback (most recent call last): File , in _do_call return fn(*args) File , in _run_fn opt ...
- 【error】OutOfRangeError (see above for traceback): RandomShuffleQueue
前言 在使用tensorflow TFRecord的过程中,读取*.tfrecord文件时出现错误,本文解决这个错误. 错误描述: OutOfRangeError (see above , curre ...
- TFRecordReader "OutOfRangeError (see above for traceback): RandomShuffleQueue '_1_shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 1, current size 0)" 问题原因总结;
1. tf.decode_raw(features['image_raw'],tf.uint8) 解码时,数据类型有没有错?tf.float32 和tf.uint8有没有弄混??? 2. tf.tra ...
- 学习笔记TF049:TensorFlow 模型存储加载、队列线程、加载数据、自定义操作
生成检查点文件(chekpoint file),扩展名.ckpt,tf.train.Saver对象调用Saver.save()生成.包含权重和其他程序定义变量,不包含图结构.另一程序使用,需要重新创建 ...
- TensorFlow实践笔记(一):数据读取
本文整理了TensorFlow中的数据读取方法,在TensorFlow中主要有三种方法读取数据: Feeding:由Python提供数据. Preloaded data:预加载数据. Reading ...
- 【学习笔记】tensorflow队列和线程
目录 Tensorflow队列 同步执行队列 队列管理器 异步执行队列 线程协调器 在使用TensorFlow进行异步计算时,队列是一种强大的机制. 为了感受一下队列,让我们来看一个简单的例子.我们先 ...
- Tensorflow 大规模数据集训练方法
本文转自:Tensorflow]超大规模数据集解决方案:通过线程来预取 原文地址:https://blog.csdn.net/mao_xiao_feng/article/details/7399178 ...
- 大数据下基于Tensorflow框架的深度学习示例教程
近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...
- 第十二节,TensorFlow读取数据的几种方法以及队列的使用
TensorFlow程序读取数据一共有3种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFlow图的起 ...
随机推荐
- celery 和 haystack
celery 是分布式异步框架 haystack 是全文检索 只能在Django中用. 一.什么是celery? ---->它是Python写的,所以只支持Python使用.但是消 ...
- 洛谷P3380 二逼平衡树
线段树+平衡树 我!又!被!卡!常!了! 以前的splay偷懒的删除找前驱后继的办法被卡了QAQ 放一个在洛谷开O2才能过的代码..我太菜了.. #include <bits/stdc++.h& ...
- Python_002_Python语言基础
♥2.1 Python的程序概述 Python程序可以分解为模块.语句.表达式.对象 ♥2.2 Python对象和引用 2.2.1 Python对象概述 对象:标识(identity).类型(t ...
- nuxt npm run dev 报错Solution to the "Error: listen EADDRINUSE 127.0.0.1:8080"
Solution to the "Error: listen EADDRINUSE 127.0.0.1:8080" Hello, Just sharing a solution t ...
- spring的DI.IoC是什么
最近要搞spring的单元测试,不得已啊啊啊啊啊啊啊啊啊又要开始搞spring…… 日目晶…… 搞这几个概念,先甩一部分代码: UserDao 接口 package com.itheima.ioc; ...
- RabbitMQ 和 Kafka
============================RabbitMQ 术语============================RabbitMQ 有很多术语和Kafka不一样, 理解这些术语十分 ...
- react native 子组件向父组件传值
父组件: 引入子组件:import CheckBox from '../checkbox'; 父子之间交互通信,接受子组件的值 fn(val){this.setState({roleType ...
- Arduino-常用指令
pinMode(LEDPin,OUTPUT); //设置引脚模式 参数1 引脚 参数2 OUTPUT 输出:INPUT 输入 用在setup()函数里 digi ...
- 简单文本悬浮div提示效果
<html> <head> <script src="jquery-1.9.1.min.js" type="text/javascript& ...
- 安装hue及hadoop和hive整合
环境: centos7 jdk1.8.0_111 Hadoop 2.7.3 Hive1.2.2 hue-3.10.0 Hue安装: 1.下载hue-3.10.0.tgz: https://dl.dro ...