一、基本队列:

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

tf.FIFOQueue(2,'int32')

  1. import tensorflow as tf
  2.  
  3. '''FIFO队列操作'''
  4.  
  5. # 创建队列
  6. # 队列有两个int32的元素
  7. q = tf.FIFOQueue(2,'int32')
  8. # 初始化队列
  9. init= q.enqueue_many(([0,10],))
  10. # 出队
  11. x = q.dequeue()
  12. y = x + 1
  13. # 入队
  14. q_inc = q.enqueue([y])
  15.  
  16. with tf.Session() as sess:
  17. init.run()
  18. for _ in range(5):
  19. v,_ = sess.run([x,q_inc])
  20. print(v)

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

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

二、队列管理:

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

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

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

tf.train.Coordinator()

  1. '''协调器'''
  2.  
  3. q = tf.FIFOQueue(1000,'float')
  4. counter = tf.Variable(0.0) # 计数器
  5. increment_op = tf.assign_add(counter, tf.constant(1.0)) # 计数器加一
  6. enqueue_op = q.enqueue(counter) # 入队
  7.  
  8. # 线程面向队列q,启动2个线程,每个线程中是[in,en]两个操作
  9. qr = tf.train.QueueRunner(q,enqueue_ops=[increment_op,enqueue_op]*2)
  10.  
  11. sess = tf.Session()
  12. sess.run(tf.global_variables_initializer())
  13.  
  14. coord = tf.train.Coordinator()
  15. # 线程管理器启动线程,接收协调器管理
  16. enqueue_thread = qr.create_threads(sess,coord=coord,start=True)
  17.  
  18. for i in range(0,10):
  19. print(sess.run(q.dequeue()))
  20.  
  21. coord.request_stop() # 向各个线程发终止信号
  22. 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. P4450 双亲数

    思路 同zap-queries 莫比乌斯反演的板子 数据范围小到不用整除分块... 代码 #include <cstdio> #include <algorithm> #inc ...

  2. jvm:垃圾收集器

    垃圾收集器: Serial 收集器: 单线程收集器,专注做收集,会暂停别的工作.收集效果好. ParNew 收集器: 是Serial的多线程版本.目前只有它能和CMS收集器配合.    Paralle ...

  3. facebook ads api

    api测试 https://developers.facebook.com/tools/explorer/517735271920003?method=GET&path=act_1107316 ...

  4. Leetcode1 - A + B Problem - Easy

    Write a function that add two numbers A and B. Example Example 1: Input: a = 1, b = 2 Output: 3 Expl ...

  5. Http_code码

    _codes = { : (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: ...

  6. WinForm 拖动、移动窗体

    private const int WM_NCLBUTTONDOWN = 0XA1; private const int HTCAPTION = 2; [System.Runtime.InteropS ...

  7. form提交不刷新,不跳转页面

    利用 iframe 标签 ,后台form处理可以返回void <form action="" method="post" target="nm_ ...

  8. CSS垂直居中查询宝典

    一.垂直居中的用处 设计稿需求 当我们抱怨设计反复不定的时候,试着理解一下.每一位开发者也会是一位用户,请多多用'用户'的角色去开发.就比如下面这图,你会更稀饭哪种格式呢? 如果我们使用一个webap ...

  9. 动态LINQ(Lambda表达式)

    1.准备数据实体 public class Data { public string AccountNO { get; set; } public int Count { get; set; } } ...

  10. JsonAutoDetect注解找不到错误

    RedisConfig类代码: package com.neo.SpringBoot.config; import java.lang.reflect.Method; import org.sprin ...