【TensorFlow】TensorFlow读取数据

2022-09-05 13:38:17 浏览数 (1)

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版本以后)有三种读取数据方式:

  1. 使用placeholder读内存中的数据
  2. 使用queue读硬盘中的数据
  3. 使用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文件

0 人点赞