队列
tf.FIFOQueue
:先进先出队列tf.RandomShuffleQueue
:每次出队都是随机选择一个
1 | import tensorflow as tf |
多线程
tf.Coordinator
- 协同多个线程一起停止
- 创建Coordinator对象后,将该对象传入每个线程中
- 启动的线程会定期轮询
should_stop
函数,若为True,则表示当前线程需要退出 - 当运行中的某一个线程调用
request_stop
函数时,所有线程的should_stop
返回值将为True - 主线程中使用
join
进行线程等待
tf.QueueRunner
1 | import tensorflow as tf |
1 | import tensorflow as tf |
输入文件队列
模拟生成多个TFRecord格式文件
1 | import tensorflow as tf |
处理多个TFRecord格式数据
1 | import tensorflow as tf |
组合训练数据(batching)
1 | import tensorflow as tf |
tf.train.batch
tf.train.shuffle_batch
tf.train.shffle_batch_join
通过指定以上函数中的num_threads参数,来指定用几个线程来操作入队动作,其中tf.train.shuffle_batch
为多个线程读取相同的文件,tf.train.shffle_batch_join
为不同的线程读取不同的文件。
输入数据处理框架
首先将MNIST数据集转换为TFRecord格式,代码见blog
处理代码
1 | import tensorflow as tf |
处理流程
tf.train.string_input_producer
- 输入文件列表 {“A”, “B”, “C”}
- 随机打乱
- 输入文件队列 {“B”, “B”, “C”, “A”, “ “, “ “}
tf.train.shuffle_batch
- 生成多个Reader {“Reader1”, “Reader2”}
- 分别进行数据预处理
- 样例组合队列 {“(a,0)”, “(c,1)”, “(b,0)”, “(c,1)”, “…”, …}
- 生成Batch1、Batch2