def encode_sample(self, sample_dict): """See base class for details.""" # Flatten dict matching the tf-example specs # Use NonMutableDict to ensure there is no collision between features keys tfexample_dict = utils.NonMutableDict() # Iterate over sample fields for feature_key, (feature, sample_value) in utils.zip_dict( self._feature_dict, sample_dict ): # Encode the field with the associated encoder encoded_feature = feature.encode_sample(sample_value) # Singleton case if not feature.specs_keys: tfexample_dict[feature_key] = encoded_feature # Feature contains sub features else: _assert_keys_match(encoded_feature.keys(), feature.specs_keys) tfexample_dict.update({ posixpath.join(feature_key, k): encoded_feature[k] for k in feature.specs_keys }) return tfexample_dict
def __init__(self, split_info=None): self._splits = utils.NonMutableDict( error_msg="Overlap between splits. Split {key} has been added with " "itself.") if split_info: self.add(SlicedSplitInfo(split_info=split_info, slice_value=None))
def get_specs(self): """See base class for details.""" # Flatten tf-example specs dict # Use NonMutableDict to ensure there is no collision between features keys specs_dict = utils.NonMutableDict() for feature_key, feature in self._feature_dict.items(): feature_specs = feature.get_specs() # Features can be either containers (dict of other features) or plain # features (ex: single tensor). Plain features have a None # feature.specs_keys if not feature.specs_keys: specs_dict[feature_key] = feature_specs else: # Sanity check which should always be True, as feature.specs_keys is # computed using feature.get_specs() _assert_keys_match(feature_specs.keys(), feature.specs_keys) specs_dict.update({ posixpath.join(feature_key, k): v for k, v in feature_specs.items() }) return specs_dict