def parse_example(self, serialized_example): """Deserialize a single `tf.train.Example` proto. Usage: ``` ds = tf.data.TFRecordDataset(filepath) ds = ds.map(file_adapter.parse_example) ``` Args: serialized_example: `tf.Tensor`, the `tf.string` tensor containing the serialized proto to decode. Returns: example: A nested `dict` of `tf.Tensor` values. The structure and tensors shape/dtype match the `example_specs` provided at construction. """ example = tf.io.parse_single_example( serialized=serialized_example, features=self._build_feature_specs(), ) example = { k: _deserialize_single_field(example_data, tensor_info) for k, (example_data, tensor_info ) in utils.zip_dict(example, self._flat_example_specs) } # Reconstruct all nesting example = utils.pack_as_nest_dict(example, self._example_specs) return example
def parse_example(self, serialized_example): """Deserialize a single `tf.train.Example` proto. Usage: ``` ds = tf.data.TFRecordDataset(filepath) ds = ds.map(file_adapter.parse_example) ``` Args: serialized_example: `tf.Tensor`, the `tf.string` tensor containing the serialized proto to decode. Returns: example: A nested `dict` of `tf.Tensor` values. The structure and tensors shape/dtype match the `example_specs` provided at construction. """ nested_feature_specs = self._build_feature_specs() # Because of RaggedTensor specs, feature_specs can be a 2-level nested dict, # so have to wrap `tf.io.parse_single_example` between # `flatten_nest_dict`/`pack_as_nest_dict`. # { # 'video/image': tf.io.FixedLenSequenceFeature(...), # 'video/object/bbox': { # 'ragged_flat_values': tf.io.FixedLenSequenceFeature(...), # 'ragged_row_lengths_0', tf.io.FixedLenSequenceFeature(...), # }, # } flat_feature_specs = utils.flatten_nest_dict(nested_feature_specs) example = tf.io.parse_single_example( serialized=serialized_example, features=flat_feature_specs, ) example = utils.pack_as_nest_dict(example, nested_feature_specs) example = { # pylint:disable=g-complex-comprehension k: _deserialize_single_field(example_data, tensor_info) for k, ( example_data, tensor_info) in utils.zip_dict(example, self._flat_example_specs) } # Reconstruct all nesting example = utils.pack_as_nest_dict(example, self._example_specs) return example