TF-Slim提供了一个数据加载库,便于从各种格式读取数据。TF-Slim的数据模块由多个抽象层组成,使其足够灵活,可支持多种文件存储类型,如TFRecords或文本文件,数据编码和功能命名方案。
加载数据的任务有两个主要组成部分:(1)数据集如何表示的规范,以便可以读取和解释;(2)向数据集的消费者提供数据的指令。
其次,必须指定数据如何实际提供和存储在存储器中的指令。例如,如果数据在多个源上分片,是否应该从这些源并行读取?是否应该连续阅读?数据应该在内存中洗牌吗?
TF-Slim将数据集定义为表示一组有限样本的一组文件(可以编码或不编码),并且可以读取这些文件以提供预定义的一组实体或items
。例如,数据集可能存储在数千个文件或单个文件中。这些文件可能以明文或某些高级编码方案存储数据。它可以提供单个item
,如图像,或几个items
,如图像,类标签和场景标签。
更具体地说,TF-Slim的 数据集 是一个元组,它封装了数据集规范的以下元素:
data_sources
:组成数据集的文件路径列表reader
: 适用于文件类型的TensorFlow Readerdata_sources
。decoder
:TF-Slim data_decoder 类,用于解码读取数据集文件的内容。num_samples
:数据集中的样本数。items_to_descriptions
:从数据集提供的项目到每个项目的描述的映射。简而言之,通过以下方式读取数据集:(a)打开data_sources
使用给定reader
类指定的文件 (b)使用给定的解码文件,decoder
以及(c)允许用户请求items
返回的列表Tensors
。
甲 data_decoder 是被给予一些(可能是串行化/编码)数据和返回的列表的类Tensors
。特别地,给定的数据解码器能够解码预定义的列表,items
并且可以在请求时返回它们的子集或全部:
#加载数据
my_encoded_data = ...
data_decoder = MyDataDecoder()
#解码的输入和标签:
decoded_input,decoded_labels = data_decoder.Decode(数据,[ '输入', '标签' ])
#解码只是输入:
decoded_input = data_decoder.Decode(数据,[ '输入' ])
# Check which items a data decoder knows how to decode:
for item in data_decoder.list_items():
print(item)
所述 tfexample_decoder.py 是一个数据解码器,其解码串行TFExample
协议缓冲区。甲 TFExample
协议缓冲液是从键(串)的映射到任何一个 tf.FixedLenFeature
或tf.VarLenFeature
。因此,为了解码 TFExample
,必须提供来自一个或多个的映射TFExample
到每个字段items
使tfexample_decoder
能提供。例如,数据集TFExamples
可能以各种格式存储图像,每个数据集TFExample
可能包含一个encoding
键和一个format
键,可用于使用适当的解码器(jpg,png等)解码图像。
为了使这成为可能,在tfexample_decoder
通过指定的地图的构成TFExample
键或者tf.FixedLenFeature
或 tf.VarLenFeature
以及一组ItemHandlers
。An ItemHandler
提供从TFExample
键到正在提供的项目的映射。因为a tfexample_decoder
可能返回多个items
,所以通常会构造一个 tfexample_decoder
使用倍数ItemHandlers
。
tfexample_decoder
提供了一些预定义的ItemHandlers
,用于处理映射TFExamples
到图像的常见情况,Tensors
以及SparseTensors
。例如,以下规范可能用于解码图像数据集:
keys_to_features = {
' image / encoded ':tf.FixedLenFeature((),tf.string,default_value = ' '),
' image / format ':tf.FixedLenFeature((),tf.string,default_value = ' raw '),
' image / class / label ':tf.FixedLenFeature(
[ 1 ],tf.int64,DEFAULT_VALUE = tf.zeros([ 1 ],D型细胞= tf.int64)),
}
items_to_handlers = {
'图像':tfexample_decoder.Image(
image_key = '图像/编码',
format_key = '图像/格式',
形状= [ 28,28 ],
通道= 1),
'标签':tfexample_decoder.Tensor('图像/ class / label '),
}
decoder = tfexample_decoder.TFExampleDecoder(
keys_to_features,items_to_handlers)
请注意,TFExample使用三个键解析:image/encoded
, image/format
和image/class/label
。此外,前两个键映射到一个item
名为“图像” 的单个。根据定义,这data_decoder
提供了两个items
名为'image'和'label'。
甲 data_provider 是提供了一类Tensors
用于请求的每个文件:
my_data_provider = ...
image,class_label,bounding_box = my_data_provider.get(
[ ' image ',' label ',' bb ' ])
所述 dataset_data_provider 是data_provider
提供从一个给定的数据dataset
规格:
dataset = GetDataset(...)
data_provider = dataset_data_provider.DatasetDataProvider(
dataset,common_queue_capacity = 32,common_queue_min = 8)
在dataset_data_provider
允许对数据提供的几个要素的控制: