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图的起 ...
随机推荐
- P3373 【模板】线段树 2
线段树的模板,但是还应注意维护乘标记,乘法的优先级大于加法,一定记得还要取模. #include<bits/stdc++.h> using namespace std; ; struct ...
- react-redux的基本用法
注意:读懂本文需要具备redux基础知识, 注明:本文旨在说明如何在实际项目中快速使用react-redux,限于篇幅,本文对具体的原理并未做分析,请参考redux官网 我一直以为我写了一篇关于rea ...
- knnsearch
转载:https://blog.csdn.net/bushixiaofan/article/details/27700299 K近邻算法是找到K个最近的邻居. IDX = knnsearch(X,Y) ...
- tensorflow-TFRecord报错ValueError: Protocol message Feature has no "feature" field.
编写代码用TFRecord数据结构存储数据集信息是报错:ValueError: Protocol message Feature has no "feature" field.或和 ...
- 【ML】从特征分解,奇异值分解到主成分分析
1.理解特征值,特征向量 一个对角阵\(A\),用它做变换时,自然坐标系的坐标轴不会发生旋转变化,而只会发生伸缩,且伸缩的比例就是\(A\)中对角线对应的数值大小. 对于普通矩阵\(A\)来说,是不是 ...
- 前端动态菜单-bootstrap-treeview
一.bootstrap-treeview 官网 Demo bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter ...
- spring启动容器加载成功后执行调用方法
需求: 由于在微服务架构中各服务之间都是通过接口调用来进行交互的,像很多的基础服务,类似字典信息其实并不需每次需要的时候再去请求接口.所以我的想法是每次启动项目的时候,容器初始化完成,就去调用一下基础 ...
- PAT 甲级真题题解(63-120)
2019/4/3 1063 Set Similarity n个序列分别先放进集合里去重.在询问的时候,遍历A集合中每个数,判断下该数在B集合中是否存在,统计存在个数(分子),分母就是两个集合大小减去分 ...
- 20165223《网络对抗技术》Exp4 恶意代码分析
目录 -- 恶意代码分析 恶意代码分析说明 实验任务目标 实验内容概述 schtasks命令使用 实验内容 系统运行监控 恶意软件分析 静态分析 virscan分析和VirusTotal分析 PEiD ...
- EOF输入
EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取.资料源通常称为档案或串流.通常在文本的最后存在此字符表示资料结束.是int类型的宏定义,它扩展为负整数 ...