一、基本队列:

队列有两个基本操作,对应在tf中就是enqueue&dequeue

tf.FIFOQueue(2,'int32')

import tensorflow as tf

'''FIFO队列操作'''

# 创建队列
# 队列有两个int32的元素
q = tf.FIFOQueue(2,'int32')
# 初始化队列
init= q.enqueue_many(([0,10],))
# 出队
x = q.dequeue()
y = x + 1
# 入队
q_inc = q.enqueue([y]) with tf.Session() as sess:
init.run()
for _ in range(5):
v,_ = sess.run([x,q_inc])
print(v)

tf.RandomShuffleQueue(capacity=10,min_after_dequeue=2,dtypes='float')

'''随机队列操作'''

# 最大长度10,最小长度2,类型float的随机队列
q = tf.RandomShuffleQueue(capacity=10,min_after_dequeue=2,dtypes='float') sess = tf.Session()
for i in range(0,10):
sess.run(q.enqueue(i))
for i in range(0,8): # 在输出8次后会被阻塞
print(sess.run(q.dequeue())) #run_option = tf.RunOptions(timeout_in_ms = 10000) # 等待时间10s
#for i in range(0,7): # 在输出8次后会被阻塞
# # 超时报错继续,不会退出
# try:
# print(sess.run(q.dequeue(),options=run_option))
# except tf.errors.DeadlineExceededError:
# print('out of range') print('-----'*5)

二、队列管理:

tf.train.QueueRunner(q,enqueue_ops=[increment_op,enqueue_op]*2)

'''队列管理器'''

# 队列管理器使用线程管理队列

q = tf.FIFOQueue(1000,'float')
counter = tf.Variable(0.0) # 计数器
increment_op = tf.assign_add(counter, tf.constant(1.0)) # 计数器加一
enqueue_op = q.enqueue(counter) # 入队 # 线程面向队列q,启动2个线程,每个线程中是[in,en]两个操作
qr = tf.train.QueueRunner(q,enqueue_ops=[increment_op,enqueue_op]*2) sess.run(tf.global_variables_initializer())
enqueue_threads = qr.create_threads(sess,start=True) # 启动入队线程
for i in range(10):
print(sess.run(q.dequeue()))
# 由于主线程和入队线程异步,所以输出不是自然数序列

出队操作还有Queu.dequeue_many(batch_size),如果入队时采用enqueue([image, label]),则可以实现队列数据参与训练。

tf.train.Coordinator()

'''协调器'''

q = tf.FIFOQueue(1000,'float')
counter = tf.Variable(0.0) # 计数器
increment_op = tf.assign_add(counter, tf.constant(1.0)) # 计数器加一
enqueue_op = q.enqueue(counter) # 入队 # 线程面向队列q,启动2个线程,每个线程中是[in,en]两个操作
qr = tf.train.QueueRunner(q,enqueue_ops=[increment_op,enqueue_op]*2) sess = tf.Session()
sess.run(tf.global_variables_initializer()) coord = tf.train.Coordinator()
# 线程管理器启动线程,接收协调器管理
enqueue_thread = qr.create_threads(sess,coord=coord,start=True) for i in range(0,10):
print(sess.run(q.dequeue())) coord.request_stop() # 向各个线程发终止信号
coord.join(enqueue_thread) # 等待各个线程成功结束

『TensorFlow』第十弹_队列&多线程_道路多坎坷的更多相关文章

  1. 『TensorFlow』第七弹_保存&载入会话_霸王回马

    首更: 由于TensorFlow的奇怪形式,所以载入保存的是sess,把会话中当前激活的变量保存下来,所以必须保证(其他网络也要求这个)保存网络和载入网络的结构一致,且变量名称必须一致,这是caffe ...

  2. 『PyTorch』第十弹_循环神经网络

    RNN基础: 『cs231n』作业3问题1选讲_通过代码理解RNN&图像标注训练 TensorFlow RNN: 『TensotFlow』基础RNN网络分类问题 『TensotFlow』基础R ...

  3. 『TensorFlow』DCGAN生成动漫人物头像_下

    『TensorFlow』以GAN为例的神经网络类范式 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 『TensorFlow』通过代码理解gan网络_中 一.计算 ...

  4. 『TensorFlow』第十一弹_队列&多线程&TFRecod文件_我辈当高歌

    TF数据读取队列机制详解 一.TFR文件多线程队列读写操作 TFRecod文件写入操作 import tensorflow as tf def _int64_feature(value): # val ...

  5. 『TensorFlow』第三弹_可视化框架介绍_悄悄问圣僧

    添加记录节点 -> 汇总记录节点 -> run汇总节点 -> [书写器生成]书写入文件 [-> 刷新缓冲区] 可视化关键点: 注意, 1.with tf.name_scope( ...

  6. 『MXNet』第十弹_物体检测SSD

    全流程地址 一.辅助API介绍 mxnet.image.ImageDetIter 图像检测迭代器, from mxnet import image from mxnet import nd data_ ...

  7. 『TensorFlow』专题汇总

    TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...

  8. 『TensorFlow』模型保存和载入方法汇总

    『TensorFlow』第七弹_保存&载入会话_霸王回马 一.TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类,.save(sess, ckpt文件目录)方法 ...

  9. 『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导

    TensoFlow自动求导机制 『TensorFlow』第二弹_线性拟合&神经网络拟合_恰是故人归 下面做了三个简单尝试, 利用包含gradients.assign等tf函数直接构建图进行自动 ...

随机推荐

  1. [蓝桥] 算法训练 K好数

    时间限制:1.0s 内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = ...

  2. ES6中新增的数组知识

    JSON数组格式转换 JSON的数组格式就是为了前端快速的把JSON转换成数组的一种格式,我们先来看一下JSON的数组格式怎么写. let  json = {     '0': 'xzblogs', ...

  3. parent获取子元素以及自身元素

    innerHTML 设置或获取位于对象起始和结束标签内的 HTML outerHTML 设置或获取对象及其内容的 HTML 形式 innerText 设置或获取位于对象起始和结束标签内的文本 oute ...

  4. Vue学习一:{{}}html模板使用方法

    本文为博主原创,未经允许不得转载: 之前自学了vue,在项目中应用了vue,由于是第一次使用,感觉非常强大,使用也非常方便,趁有时间,总结一下vue学习过程中 各个指令的使用方法,只要掌握了vue的指 ...

  5. 3、Python迭代器、列表解析及生成器(0530)

    1.动态语言 sys.getrefcount()    //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...

  6. [UVA-11100] The Trip

    题目大意 大箱子能装小箱子,求在满足最少箱子的情况下,最小化每个箱子中最大的箱子个数. 解析 想到二分枚举箱子数,然后贪心的选择放进箱子的位置. 最优策略一定是将最大的 \(m\) 个先找出来,然后把 ...

  7. HDU 5452 Minimum Cut(LCA)

    http://acm.hdu.edu.cn/showproblem.php?pid=5452 题意: 有一个连通的图G,先给出图中的一棵生成树,然后接着给出图中剩余的边,现在要删除最少的边使得G不连通 ...

  8. HDU 4821 String(BKDRHash)

    http://acm.hdu.edu.cn/showproblem.php?pid=4821 题意:给出一个字符串,现在问你可以找出多少个长度为M*L的子串,该子串被分成L个段,并且每个段的字符串都是 ...

  9. Scala语言学习

    Scala的程序被编译成Java字节码(生成class文件),所以可以运行在JVM上,并且可以调用Java的类库,兼容Java程序. Scala 是一门多范式(multi-paradigm)的编程语言 ...

  10. 使用CSS渐变

    转载自:https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Using_CSS_gradients CSS 渐变 是在 CSS3 Image ...