TensorFlow-Slim数据

TF-Slim提供了一个数据加载库,便于从各种格式读取数据。TF-Slim的数据模块由多个抽象层组成,使其足够灵活,可支持多种文件存储类型,如TFRecords或文本文件,数据编码和功能命名方案。

概观

加载数据的任务有两个主要组成部分:(1)数据集如何表示的规范,以便可以读取和解释;(2)向数据集的消费者提供数据的指令。

其次,必须指定数据如何实际提供和存储在存储器中的指令。例如,如果数据在多个源上分片,是否应该从这些源并行读取?是否应该连续阅读?数据应该在内存中洗牌吗?

数据集规范

TF-Slim将数据集定义为表示一组有限样本的一组文件(可以编码或不编码),并且可以读取这些文件以提供预定义的一组实体或items。例如,数据集可能存储在数千个文件或单个文件中。这些文件可能以明文或某些高级编码方案存储数据。它可以提供单个item,如图像,或几个items,如图像,类标签和场景标签。

更具体地说,TF-Slim的 数据集 是一个元组,它封装了数据集规范的以下元素:

简而言之,通过以下方式读取数据集:(a)打开data_sources使用给定reader类指定的文件 (b)使用给定的解码文件,decoder以及(c)允许用户请求items返回的列表Tensors

数据解码器

data_decoder 是被给予一些(可能是串行化/编码)数据和返回的列表的类Tensors。特别地,给定的数据解码器能够解码预定义的列表,items并且可以在请求时返回它们的子集或全部:

示例:TFExampleDecoder

所述 tfexample_decoder.py 是一个数据解码器,其解码串行TFExample协议缓冲区。甲 TFExample协议缓冲液是从键(串)的映射到任何一个 tf.FixedLenFeaturetf.VarLenFeature。因此,为了解码 TFExample,必须提供来自一个或多个的映射TFExample到每个字段items使tfexample_decoder能提供。例如,数据集TFExamples可能以各种格式存储图像,每个数据集TFExample可能包含一个encoding键和一个format键,可用于使用适当的解码器(jpg,png等)解码图像。

为了使这成为可能,在tfexample_decoder通过指定的地图的构成TFExample键或者tf.FixedLenFeaturetf.VarLenFeature以及一组ItemHandlers。An ItemHandler 提供从TFExample键到正在提供的项目的映射。因为a tfexample_decoder可能返回多个items,所以通常会构造一个 tfexample_decoder使用倍数ItemHandlers

tfexample_decoder提供了一些预定义的ItemHandlers,用于处理映射TFExamples到图像的常见情况,Tensors以及SparseTensors。例如,以下规范可能用于解码图像数据集:

请注意,TFExample使用三个键解析:image/encodedimage/formatimage/class/label。此外,前两个键映射到一个item名为“图像” 的单个。根据定义,这data_decoder 提供了两个items名为'image'和'label'。

数据提供

data_provider 是提供了一类Tensors用于请求的每个文件:

所述 dataset_data_providerdata_provider提供从一个给定的数据dataset规格:

dataset_data_provider允许对数据提供的几个要素的控制: