首先需要思考的一个问题是, 什么是数据读取?以图像数据为例,读取数据的过程可以用图2-2 来表示。
假设硬盘中有一张图片数据集0001.jpg、0002.jpg、0.0003.jpg……..只需要把它们读取到内存中,然后提供给GPU或是CPU进行计算就可以了。这听起来很窑易,但事实远没离那么简单。事实上,必须先读入数据后才能计算,假设读入用时0.1s,计算用时0.9s,那么意味着每过1s,GPU都会有0.1s无事可做,这大大降低了运算效率。
如何解决这个问题呢?方法就是将读入数据和计算分别放在两个线程中,将数据读入到内存的一个队列中,如图2-3所示。
读取线程源源不断地将文件系统中的图片读入一个内存的队列中,而负责计算的是另一个线程,计算需要数据肘,直接从内存队列中取就可以了。这样可以解决GPU 因为I/O 而空闲的问题。
而在TensorFlow中ÿ