Contents
- 1 TensorFlow如何工作
- 2 TensorFlow读取数据
- 2.1 Preload data: constant 预加载数据
- 2.2 Feeding机制: placeholder, feed_dict
- 2.3 Reading From File:直接从文件中读取
- 3 TensorFlow读取图片方法
在用CNN模型做图像识别/目标检测应用时,TensorFlow输入图像数据一般要转化为一个4维数组。
在TensorFlow框架中读取数据,tf官网提供了三种读取数据的方式:
- 预加载数据: 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况)。
- 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据。
- 从文件读取数据: 在TensorFlow图的起始, 让一个输入管线从文件中读取数据。
通俗来讲,现在TensorFlow(1.4版本以后)有三种读取数据方式:
- 使用placeholder读内存中的数据
- 使用queue读硬盘中的数据
- 使用Dataset方式读取
TensorFlow如何工作
TF的核心是用C 写的,这样的好处是运行快,缺点是调用不灵活。而Python恰好相反,所以结合两种语言的优势。涉及计算的核心算子和运行框架是用C 写的,并提供API给Python。Python调用这些API,设计训练模型(Graph),再将设计好的Graph给后端去执行。简而言之,Python的角色是Design,C 是Run。
TensorFlow读取数据
Preload data: constant 预加载数据
这种方式在项目中一般很少用,我只是在学习TensorFlow编程的时候用过,后面几乎从未用到。示例代码如下:
Feeding机制: placeholder, feed_dict
这种方式用的很多,一般和文件读取(文件队列,dataset数据集)方式结合起来使用。示例代码如下:
Reading From File:直接从文件中读取
直接从文件中读取数据的方法,在TensorFlow机制中有两种方法:
- 多线程输入数据处理框架(利用TensorFlow队列)
- 数据集Dataset(更高层的数据处理框架)
下面代码演示的是利用TensorFlow队列的机制进行数据读取的例子:
TensorFlow读取图片方法
- 使用gfile读图片,decode输出是Tensor,eval后是ndarray
- 使用WholeFileReader输入queue,decode输出是Tensor,eval后是ndarray
- 使用read_file,decode输出是Tensor,eval后是ndarray
- TFRecord文件