在前面的内容中我们介绍了使用Tensorflow提供的一些函数来处理图像数据,比如旋转、增亮、锐化等等。尽管使用这些图像数据预处理方法可以在一定程度上减少无关因素对图像识别模型效果的影响,这些复杂的预处理过程仍会影响整个训练过程。 为了对大而多的图像数据做预处理,Tensorflow提供了队列加多线程处理输入数据的解决方案。在这之前我们先来学习一下Tensorflow中的队列。
数据队列
大家所熟悉的是队列(Queue)是一种先进先出的线性表数据结构,队列只允许在前端(Front)进行删除操作,在后端(Rear)进行插入操作。插入操作的一端称为队尾,删除操作的一端称为队头,如果里面不存在元素的话就称之为空队列。
Tensorflow提供了FIFOQueue和RandomShuffleQueue两种队列,其中前者就是实现一个先进先出的队列,后者实现的是一个随机队列,顺序是打乱的。
对于Tensorflow提供的队列,主要有三个函数:enqueue_many()、dequeue()和enqueue()可以修改,分别是初始化队列元素、把队首的第一个元素出队、把一个元素加入到队尾。
下面是实际操作的代码:
输出的结果是:
上面的程序展示了FIFOQueue函数的用法,下面我们再来讲一下RandomShuffleQueue函数。RandomShuffleQueue队列不是一个先进先出的队列