TensorFlow入门8 -- 导入数据之Dataset机制

参考:《深度学习图像识别技术--基于TensorFlow Object Detection API 和 OpenVINO》

TensorFlow用tf.data API 实现数据导入。输入数据流( input pipelines)可以是图像,也可以是文字(text)。

tf.data API 定义了两个抽象类型

一个是tf.data.Dataset类 ,表示元素序列。每一个元素包含一个或多个Tensor对象。例如,在一个图像数据流(image pipeline)中, 一个元素可能是一个训练数据实例(training example),该实例有一对 tensors 分别是图像数据( image data)和标签数据(label) 。

        有两种显示创建dataset的方式:

        通过从一个或多个tf.Tensor 对象上创建一个(source) (例如,用 Dataset.from_tensor_slices()) 来构造一个 dataset 

         通过对一个或多个tf.data.Dataset对象执行转换transformation) (例如,用 Dataset.batch()) 来构造一个 dataset 

另一个是tf.data.Iterator类, 它提供从数据集中提取元素的方法。Iterator.get_next()返回Dataset的下一个元素,它通常充当输入数据流(input pipeline)和模型(model)之间的接口。最简单的迭代器(iterator)是一个“单次迭代器(one-shot iterator)”,它与特定的Dataset相关联并遍历一次。 对于更复杂的用途, Iterator.initializer操作允许您使用不同的数据集重新初始化和参数化迭代器,以便您可以在同一个程序中多次迭代训练和验证数据。

要启动输入管道(input pipeline),必须定义一个源(Source)。例如,要从内存中的张量构建Dataset ,可以使用tf.data.Dataset.from_tensors()或tf.data.Dataset.from_tensor_slices()。又例如,如果输入数据以建议的TFRecord格式存储在磁盘上,则可以构建一个tf.data.TFRecordDataset 。

一旦有了Dataset对象,就可以通过tf.data.Dataset对象上的一系列方法调用将其转换为新的满足训练模型需要的Dataset 。 例如,用 Dataset.map()(将函数应用于每个元素)实现每一个元素的转换;用Dataset.batch()实现多元素转换 。 有关转换的完整列表,请参阅tf.data.Dataset的文档。范例程序如下:


TensorFlow入门8 -- 导入数据之Dataset机制_第1张图片

使用数据集(Dataset)中最常用的方法是创建一个迭代器(iterator)对象,该对象提供对数据集元素的访问。(例如,通过调用Dataset.make_one_shot_iterator()创建一个单次迭代器)。 tf.data.Iterator提供了两个操作: Iterator.initializer ,实现初始化或重新初始化迭代器的状态; 和Iterator.get_next() ,它返回下一个元素的tf.Tensor对象。 根据不同的使用情况,选择不同类型的迭代器。


TensorFlow入门8 -- 导入数据之Dataset机制_第2张图片

你可能感兴趣的:(TensorFlow入门8 -- 导入数据之Dataset机制)