Path: blob/master/site/pt-br/datasets/features.md
25115 views
FeatureConnector
A API tfds.features.FeatureConnector
:
Define a estrutura, formatos e dtypes do
tf.data.Dataset
finalAbstrai a serialização de/para o disco.
Expõe metadados adicionais (por exemplo, nomes de rótulos, taxa de amostragem de áudio,...)
Visão geral
O tfds.features.FeatureConnector
define a estrutura de características do dataset (em tfds.core.DatasetInfo
):
Características podem ser documentadas usando apenas uma descrição textual (doc='description'
) ou usando tfds.features.Documentation
diretamente para fornecer uma descrição mais detalhada da característica.
Características podem ser:
Valores escalares:
tf.bool
,tf.string
,tf.float32
,... Quando quiser documentar a característica, você também pode usartfds.features.Scalar(tf.int64, doc='description')
.tfds.features.Audio
,tfds.features.Video
,... (veja a lista de características disponíveis)dict
aninhado de características:{'metadata': {'image': Image(), 'description': tf.string}}
,...tfds.features.Sequence
aninhados:Sequence({'image': ..., 'id': ...})
,Sequence(Sequence(tf.int64))
,...
Durante a geração, os exemplos serão serializados automaticamente por FeatureConnector.encode_example
num formato adequado ao disco (atualmente buffers de protocolo tf.train.Example
):
Ao ler o dataset (por exemplo, com tfds.load
), os dados são decodificados automaticamente com FeatureConnector.decode_example
. O tf.data.Dataset
retornado corresponderá à estrutura do dict
definida em tfds.core.DatasetInfo
:
Serializar/desserializar para proto
O TFDS expõe uma API de baixo nível para serializar/desserializar exemplos para o proto tf.train.Example
.
Para serializar dict[np.ndarray | Path | str | ...]
para proto bytes
, use features.serialize_example
:
Para desserializar para proto bytes
para tf.Tensor
, use features.deserialize_example
:
Acesso de metadados
ConsVejaulte o documento de introdução para acessar os metadados das característica (nomes dos rótulos, forma, dtype,...). Exemplo:
Crie seu próprio tfds.features.FeatureConnector
Se você acredita que uma característica está faltando entre as características disponíveis, abra um novo issue.
Para criar seu próprio conector de características, você precisa herdar de tfds.features.FeatureConnector
e implementar os métodos abstratos.
Se sua característica for um valor de tensor único, é melhor herdar de
tfds.features.Tensor
e usarsuper()
quando necessário. Veja o código-fontetfds.features.BBoxFeature
para um exemplo.Se seu recurso for um container de múltiplos tensores, é melhor herdar de
tfds.features.FeaturesDict
e usarsuper()
para codificar automaticamente os subconectores.
O objeto tfds.features.FeatureConnector
abstrai como o recurso é codificado no disco e como ele é apresentado ao usuário. Abaixo está um diagrama que mostra as camadas de abstração do dataset e a transformação dos arquivos brutos do dataset para o objeto tf.data.Dataset
.
Para criar seu próprio conector de características, crie uma subclasse de tfds.features.FeatureConnector
e implemente os métodos abstratos a seguir:
encode_example(data)
: define como codificar os dados fornecidos no gerador_generate_examples()
em dados compatíveis comtf.train.Example
. Pode retornar um único valor ou umdict
de valores.decode_example(data)
: define como decodificar os dados do tensor lido detf.train.Example
no tensor do usuário retornado portf.data.Dataset
.get_tensor_info()
: indica o formato/tipo do(s) tensor(es) retornado(s) portf.data.Dataset
. Pode ser opcional se herdar de outrotfds.features
.(opcionalmente)
get_serialized_info()
: se as informações retornadas porget_tensor_info()
forem diferentes de como os dados são realmente gravados no disco, então você precisa sobrescreverget_serialized_info()
para corresponder às especificações dotf.train.Example
to_json_content
/from_json_content
: é necessário para permitir que seu dataset seja carregado sem o código-fonte original. Veja Recurso de áudio para um exemplo.
Observação: certifique-se de testar seus conectores de características com self.assertFeature
e tfds.testing.FeatureExpectationItem
. Dê uma olhada nos exemplos de teste:
Para obter mais informações, dê uma olhada na documentação tfds.features.FeatureConnector
. Também é melhor ver alguns exemplos reais.