FeatureConnector

A API tfds.features.FeatureConnector :

  • Define a estrutura, formas e tipos de dados dotf.data.Dataset final
  • Abstraia a serialização de / para o disco.
  • Expor metadados adicionais (por exemplo, nomes de rótulos, taxa de amostragem de áudio, ...)

Visão geral

tfds.features.FeatureConnector define a estrutura dos recursos do conjunto de dados (em tfds.core.DatasetInfo ):

tfds.core.DatasetInfo(
    features=tfds.features.FeaturesDict({
        'image': tfds.features.Image(shape=(28, 28, 1)),
        'label': tfds.features.ClassLabel(names=['no', 'yes']),
        'metadata': {
            'id': tf.int64,
            'language': tf.string,
        },
    }),
)

Os recursos podem ser:

Durante a geração, os exemplos serão serializados automaticamente por FeatureConnector.encode_example em um formato adequado para disco (atualmente tf.train.Example buffers de protocolo):

yield {
    'image': '/path/to/img0.png',  # `np.array`, file bytes,... also accepted
    'label': 'yes',  # int (0-num_classes) also accepted
    'metadata': {
        'id': 43,
        'language': 'en',
    },
}

Ao ler o conjunto de dados (por exemplo, com tfds.load ), os dados são decodificados automaticamente com FeatureConnector.decode_example . Otf.data.Dataset retornado corresponderá à estrutura dict definida em tfds.core.DatasetInfo :

ds = tfds.load(...)
ds.element_spec == {
    'image': tf.TensorSpec(shape=(28, 28, 1), tf.uint8),
    'label': tf.TensorSpec(shape=(), tf.int64),
    'metadata': {
        'id': tf.TensorSpec(shape=(), tf.int64),
        'language': tf.TensorSpec(shape=(), tf.string),
    },
}

Metadados de acesso

Consulte o documento de introdução para acessar os metadados dos recursos (nomes de rótulos, forma, dtype, ...). Exemplo:

ds, info = tfds.load(..., with_info=True)

info.features['label'].names  # ['cat', 'dog', ...]
info.features['label'].str2int('cat')  # 0

Crie seu próprio tfds.features.FeatureConnector

Se você acredita que um recurso está faltando nos recursos disponíveis , abra um novo problema .

Para criar seu próprio conector de recurso, você precisa herdar de tfds.features.FeatureConnector e implementar os métodos abstratos.

O objeto tfds.features.FeatureConnector abstrai como o recurso é codificado no disco de como é apresentado ao usuário. Abaixo está um diagrama que mostra as camadas de abstração do conjunto de dados e a transformação dos arquivos do conjunto de dados brutos para o objetotf.data.Dataset .

Camadas de abstração DatasetBuilder

Para criar seu próprio conector de recurso, tfds.features.FeatureConnector subclasse de tfds.features.FeatureConnector e implemente os métodos abstratos:

  • encode_example(data) : define como codificar os dados fornecidos no gerador _generate_examples() em dados compatíveis com tf.train.Example . Pode retornar um único valor ou um dict de valores.
  • decode_example(data) : define como decodificar os dados do tensor lido de tf.train.Example no tensor do usuário retornado portf.data.Dataset .
  • get_tensor_info() : indica a forma / dtipo do (s) tensor (es) retornado (s) portf.data.Dataset . Pode ser opcional se herdar de outro tfds.features .
  • (opcionalmente) get_serialized_info() : Se as informações retornadas por get_tensor_info() forem diferentes de como os dados são realmente gravados no disco, você precisará sobrescrever get_serialized_info() para corresponder às especificações de tf.train.Example
  • to_json_content / from_json_content : Isso é necessário para permitir que seu conjunto de dados seja carregado sem o código-fonte original. Veja o recurso de áudio para um exemplo.

Para obter mais informações, dê uma olhada na documentação do tfds.features.FeatureConnector . Também é melhor olhar para exemplos reais .