-
经典的输入数据的处理流程
-
队列和多线程
-
在tensorflow中,队列和变量类似,都是计算图上有状态的节点。其他的计算节点可以修改他们的状态。对于变量,可以通过赋值的操作修改变量的取值。对于队列,修改队列的状态的操作主要有enqueue,dequeue(入队,出队)等。
-
在TensorFlow中,队列不仅仅是一种数据结构,还是异步计算张量取值的一个重要机制。比如多个线程可以同时项一个队列中写元素,或者同时读取一个队列中的元素
-
TensorFlow提供了tf.Coordinator和tf.QueueRunner两个类来完成多线程协同的功能。前者主要是用于协同多个线程一起停止,提供了should_stop,request_stop,join三个函数;后者主要用于启动多个线程来操作同一个队列,启动的多线程可以通过tf.Coordinator来进行管理。
-
输入文件队列:假设现在所有的训练数据都已经存成了tfrecord文件(当训练数据量很大时,则可以将存成多个文件),可以用Tensorflow来管理输入文件列表
-
组合训练数据(batching):通过上述程序,我们可以可以从文件列表中读取单个数据样例,并对相应的数据可以进行预处理。但是在送进神经网络训练时,输入的时一个batch的数据,这部分实现将单个样例组合成一个batch.Tensorflow中有tf.train.batch()函数和tf.trian.shuffle_batch()函数可以实现这一步骤。这两个函数都会生成一个队列,入队的操作就是生成单个样例的方法,每次出队得到的就是一个batch的数据,二者的区别在于是否会将数据进行随机打乱。
说明:tf.train.batch和tf.train.shuffle_batch共同点在于当指定的线程数大于1时,会读取同一个文件中的不同的样例,进行处理。tf.train.batch.join和tf.train.shuffle_batch.join函数,是读取不同的文件中的不同的样例
-
-
-