TensorFlow之队列与多线程(二)
学习记录
这篇博客是衔接上一篇中介绍的多线程对队列的操作的内容,继续介绍通过此方法对训练数据的读取以用于训练。这篇博客中的内容是基于假设所有的输入数据都已经整理成了TFRecord格式。关于将输入数据转换成TFRecord格式的这部分内容后续看情况是否写个博客来做个记录。这部分的学习依旧主要是参照着《TensorFlow实战Google深度学习框架》一书中对应的部分,以下也相当于是相应部分的一个阅读笔记。
输入文件队列
TFRecord文件
在正式介绍利用队列与多线程读取数据之前,先给出一个简单的程序来生成样例数据。
# 创建一个TFRecord的帮助文件
def _int64_feature(value):
return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
# 模拟海量数据情况下将数据写入不同的文件。num_shards定义了总共写入多少个文件
# instances_per_shard定义了每个文件中多少个数据
num_shards = 2
instances_per_shard = 2
for i in range(num_shards):
# 将数据划分为多个文件时,可以将不同文件以类似0000n-of-0000m的后缀区分。
# 其中m表示数据总共被存储在多少个文件中,n表示当前文件的标号
# 式样的方式既方便了通过正则表达式获取文件列表,又在文件名中加入了更多的信息
filename = ('./data.tfrecords-%.5d-of-%.5d' % (i, num_shards))
writer = tf.python_io.TFRecordWriter(filename)
# 将数据封装成example结构并写入TFRecord文件
for j in range(instances_per_shard):
example = tf.train.Example(features=tf.train.Features(feature={
'i': _int64_feature(i),
'j': _int64_feature(j)
}))
writer.write(example.SerializeToString())
writer.close()
刚开始看这个代码,好多点都不太明白,下面对代码中一些点做个记录。
- tf.t