Tensorflow queue
来源:互联网 发布:公务员面试yy软件 编辑:程序博客网 时间:2024/06/18 17:57
tensorflow 如何读取数据
tensorflow有三种把数据放入计算图中的方式:
- 通过feed_dict
- 通过文件名读取数据:一个输入流水线 在计算图的开始部分从文件中读取数据
- 把数据预加载到一个常量或者变量中
第一个和第三个都很简单,本文主要介绍的是第二种.
考虑一个场景:我们有大量的数据,无法一次导入内存,那我们一次就只能导入几个nimi-batch
,然后进行训练,然后再导入几个mini-batch
然后再进行训练.可能你会想,为什么我们不能在训练的时候,并行的导入下次要训练的几个mini-batch
呢?幸运的是,tensorflow已经提供了这个机制.也许你还会问,既然你可以在训练前个mini-batch
的时候把要训练的下几个mini-batch
导进来,那么内存是足够将两次的mini-batch
都导入进来的,为什么我们不直接把两次的mini-batch
都导入呢,占满整个内存.实际上,这种方法,相比之前所述的流水线似的方法,还是慢的.
现在来看tensorflow给我们提供了什么
Queue
Queue
,队列,用来存放数据(跟Variable
似的),tensorflow
中的Queue
中已经实现了同步机制,所以我们可以放心的往里面添加数据还有读取数据.如果Queue
中的数据满了,那么en_queue
操作将会阻塞,如果Queue
是空的,那么dequeue
操作就会阻塞.在常用环境中,一般是有多个en_queue
线程同时像Queue
中放数据,有一个dequeue
操作从Queue
中取数据.一般来说enqueue
线程就是准备数据的线程,dequeue
线程就是训练数据的线程.
Coordinator(协调者)
Coordinator
就是用来帮助多个线程同时停止.线程组需要一个Coordinator
来协调它们之间的工作.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
QueueRunner
QueueRunner
创建多个线程对Queue
进行enqueue
操作.它是一个op
.这些线程可以通过上面所述的Coordinator
来协调它们同时停止工作.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
有了这些基础,我们来看一下tensorflow的input-pipeline
tensorflow 输入流水线
我们先梳理一些之前说的东西.Queue
是一个队列,QueueRunner
用来创建多个线程对Queue
进行enqueue
操作.Coordinator
可用来协调QueueRunner
创建出来的线程共同停止工作.
下面来看tensorflow的输入流水线.
- 准备文件名
- 创建一个
Reader
从文件中读取数据 - 定义文件中数据的解码规则
- 解析数据
即:(文件名 -> reader -> decoder)
从文件里读数据,读完了,就换另一个文件.文件名放在string_input_producer
中.
下面的代码是来自官网的一个示例
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
我们来一步步解析它,
tf.train.string_input_producer([“file0.csv”, “file1.csv”])
先来看第一个APItf.train.string_input_producer(["file0.csv", "file1.csv"])
,看一下里面的代码怎么实现的.在追到input_producer
时,我们会看到下面这些代码.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
看到这,我们就很清楚tf.train.string_input_producer(["file0.csv", "file1.csv"])
到底干了啥了:
- 创建一个
Queue
- 创建一个
enqueue_op
- 使用
QueueRunner
创建一个线程来执行enqueue_op
,并把QueueRunner
放入collection
中 - 返回创建的
Queue
如今文件名已经用一个Queue
管理好了,下一步就是如何从文件中读数据与解析数据了.
定义数据解析OP
- 1
- 2
对读取的一个数据进行解析,然后进行一些预处理
- 1
- 2
- 3
解析完数据之后,我们就获得了一个样本的data
和label
Tensor
.
现在我们就想了,能否通过Queue
机制,利用多线程准备好batch
数据,然后我们通过dequeue
来获得一个mini-batch
的样本呢?这个 tensorflow
也给出了解决方案.
如何使用mini-batch
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
这里面重要的一个方法就是tf.train.shuffle_batch
,它所干的事情有:
- 创建一个
RandomShuffleQueue
用来保存样本 - 使用
QueueRunner
创建多个enqueue
线程向Queue
中放数据 - 创建一个
dequeue_many
OP - 返回
dequeue_many
OP
然后我们就可以使用dequeue
出来的mini-batch
来训练网络了.
转自http://blog.csdn.net/u012436149/article/details/72353313
- Tensorflow queue
- tensorflow queue operation
- Tensorflow 数据预读取--Queue
- [Tensorflow] Reader & queue图片读取管道
- Tensorflow函数说明(3)——queue
- Queue
- queue
- Queue
- QUEUE ~
- queue
- queue
- queue
- queue
- queue
- queue
- Queue
- Queue
- queue
- java
- 微信公众号开发,json里有中文unicode的解决方法
- 面试题——股票利益最大化
- jQuery非空验证
- ORACLE WITH AS 用法
- Tensorflow queue
- 子级Repeater获取 父级Repeater 中的值
- 区块链来了:未来注定颠覆我们的生活
- 正式发布 Android 架构组件 1.0 稳定版 | 附带中文介绍视频
- Redis特性和应用场景
- vue.js在windows本地下搭建环境和创建项目
- L2-009. 抢红包
- centos7.3部署tomcat并外网访问
- SecureCRT7.0使用之自动记录日志功能