tensorflow之并行读入数据详解

  

最近研究了一下并行读入数据的方式,现在将自己的理解整理如下,理解比较浅,仅供参考。

  

并行读入数据主要分

  

1。创建文件名列表

  

2。创建文件名队列

  

3。创建读者和解码器

  

4。创建样例列表

  

5。创建批列表(读取时可要可不要,一般情况下样例列表可以执行读取数据操作,但是在实际训练的时候往往需要批列表来分批进行数据的组织,提取)

  

其具体流程如下:

  

 tensorflow之并行读入数据详解

  

<强>一、文件名列表:

  

文件名列表是一个列表类型的数据,里面的内容是需要用的数据文件名。可以使用常规的python语法入:[file1 file2]。也可以使用tf.train.match_filename_once方法通过匹配输入。

  

<强>二,文件名队列

  

一般使用tf.train.string_input_producer的方法创建文件名队列。该方法传入的是一个文件名列表,输出的是一个先进先出队列。在该方法中存在两个重要参数,num_epochs和shuffle.num_epochs表示列表遍历的次数,主要是由于有时候训练模型需要反复的遍历数据集便于更新模型参数,默认情况下是没有(循环遍历).shuffle表示是否随机遍历,默认情况下是正确的,表示数据会随机输入队列,当想顺序读入数据时洗牌设置为假的。至于其他的能力表示列表的容量,shared_name表示共享时的名字。

  

<强>三、读者和解码器

  

读者的功能是读取数据记录,解码器的功能是将数据的记录转化为张量格式。在使用时需要先创建输入数据文件对应的读者,然后从文件名队列中取出文件名,在调用Reader.read的方法返回一个类似于(输入文件名,数据记录)的元组。最后使用解码器方法将每一列数据都转化为张量的形式。

  

 tensorflow之并行读入数据详解

  

<强>四、批队列

  

批队列可以在构建图之前事先构建好,样例队列需要在图中直接产生不用直接预定义,所以先介绍批队列的构建方式。批队列主要是样例打包聚集成批数据,能供模型训练使用。一般是使用tf.train.shuffle_batch和tf.train。批处理的方法构建。可以控制批的大小(一次性读入的数据大小),线程个数,然后在图中直接调用。

  

 tensorflow之并行读入数据详解

  

<强>五、样例队列

  

样例队列的创建方式是隐式的,一般在图中为了计算任务顺利的输入数据,我们一般使用tf.train.start_queue_runners方法启动所有的入队操作所需的线程,此时会自动执行所有的文件名入队操作和文件名队列的操作,执行样例队列入队和样例队列的操作。这些都是在后台产生的。

  

<强>六、线程协调器

  

并行读取数据离不开多线程操作,多线程操作离不开线程调节器.tensorflow使用tf.train.Coordinatior方法创建管理多线程生命周期的调节器。调节器的工作原理比较简单,它监控Tensoflow后台的所有线程,当某一个线程出现异常时,它的should_stop方法返回真,最后调用request_stop终止所有的线程。但是要注意我们在使用线程调节器之前一定要调用tf.local_variables_initializer方法进行初始化。

  

<强>七,读入数据类型

  

tensorflow读入的数据类型可以使csv, TFRecord和自由格式文件. csv的读取直接调用tf.TextLineReader构建读者,再调用tf.decoder_csv的方法对文件进行解码变为张量。

  

TFRecoder是tensorflow标准的输入格式,它是通过protocolBuffer构建的存储数据记录的结构。该数据结构分明,一个样例中包含一组特征特性,一个特性又包含多个特征向量特性。其在读取的时候主要使用tf.TFRecoderReader的方法构建读者,在使用读的方法读出元组。接着对元组中采的价值用tf.parse_single_example()方法进行解析。再解析的时候需要传入特性参数,该参数要和构造该文件时输入的字典型变量保持一致(关键值)。key和输入的关键一致,价值是一个表示该密钥对应的维度和类型的定西,用tf.FixedLenFeature函数构造,该函数传入参数表示特征形状和特征值的类型。具体如下:

  

 tensorflow之并行读入数据详解

  

tensorflow之并行读入数据详解