Path: blob/master/site/pt-br/datasets/external_tfrecord.md
38627 views
Carregando um tfrecord externo com TFDS
Se você possui um proto tf.train.Example (dentro de .tfrecord, .riegeli,...), que foi gerado por ferramentas de terceiros, que você gostaria de carregar diretamente com a API tfds, então esta página é para você.
Para carregar seus arquivos .tfrecord , você só precisa:
Siga a convenção de nomenclatura TFDS.
Acrescentar arquivos de metadados (
dataset_info.json,features.json) junto com seus arquivos tfrecord.
Limitações
tf.train.SequenceExamplenão é suportado, apenastf.train.Example.Você precisa ser capaz de expressar
tf.train.Exampleem termos detfds.features(veja a seção abaixo).
Convenção de nomenclatura de arquivos
O TFDS suporta a definição de um modelo para nomes de arquivos, o que fornece flexibilidade para usar diferentes esquemas de nomenclatura de arquivos. O modelo é representado por um tfds.core.ShardedFileTemplate e suporta as seguintes variáveis: {DATASET}, {SPLIT}, {FILEFORMAT}, {SHARD_INDEX}, {NUM_SHARDS} e {SHARD_X_OF_Y}. Por exemplo, o esquema de nomenclatura de arquivo padrão do TFDS é: {DATASET}-{SPLIT}.{FILEFORMAT}-{SHARD_X_OF_Y}. Para MNIST, isso significa que os nomes dos arquivos têm a seguinte aparência:
mnist-test.tfrecord-00000-of-00001mnist-train.tfrecord-00000-of-00001
Adicione metadados
Forneça a estrutura de características
Para que o TFDS seja capaz de decodificar o proto tf.train.Example, você precisa fornecer a estrutura tfds.features que corresponda às suas especificações. Por exemplo:
Corresponde às seguintes especificações tf.train.Example:
A especificação das características permite que o TFDS decodifique automaticamente imagens, vídeos,... Como qualquer outro dataset do TFDS, os metadados das características (por exemplo, nomes de rótulos,...) serão expostos ao usuário (por exemplo info.features['label'].names).
Se você controla o pipeline de geração
Se você gerar datasets fora do TFDS, mas ainda controla o pipeline de geração, poderá usar tfds.features.FeatureConnector.serialize_example para codificar seus dados de dict[np.ndarray] para tf.train.Example proto bytes:
Isso garantirá a compatibilidade das características com o TFDS.
Da mesma forma, existe um feature.deserialize_example para decodificar o proto (exemplo)
Se você não controla o pipeline de geração
Se você quiser ver como tfds.features são representados num tf.train.Example, você pode examinar isto no colab:
Para traduzir
tfds.featuresnuma estrutura legível por humanos dotf.train.Example, você pode chamarfeatures.get_serialized_info().Para obter a especificação exata
FixedLenFeature,... passada paratf.io.parse_single_example, você pode usarspec = features.tf_example_spec
Observação: se você estiver usando um conector de recursos personalizado, certifique-se de implementar to_json_content / from_json_content e testar com self.assertFeature (consulte o guia do conector de recursos )
Obtenha estatísticas das divisões
O TFDS requer saber o número exato de exemplos dentro de cada fragmento. Isto é necessário para recursos como len(ds) ou a API subsplit: split='train[75%:]' .
Se você tiver essas informações, poderá criar explicitamente uma lista de
tfds.core.SplitInfoe pular para a próxima seção:Se você não souber sobre essas informações, poderá calculá-las usando o script
compute_split_info.py(ou em seu próprio script comtfds.folder_dataset.compute_split_info). Ele iniciará um pipeline de feixe que lerá todos os fragmentos num determinado diretório e calculará as informações.
Adicione arquivos de metadados
Para adicionar automaticamente os arquivos de metadados adequados ao seu dataset, use tfds.folder_dataset.write_metadata:
Depois que a função for chamada uma vez na pasta do seru dataset, os arquivos de metadados (dataset_info.json,...) foram adicionados e seus datasets estão prontos para serem carregados com TFDS (veja a próxima seção).
Carregue o dataset com TFDS
Diretamente da pasta
Depois que os metadados forem gerados, os datasets podem ser carregados usando tfds.builder_from_directory que retorna um tfds.core.DatasetBuilder com a API TFDS padrão (como tfds.builder):
Diretamente de múltiplas pastas
Também é possível carregar dados de múltiplas pastas. Isso pode acontecer, por exemplo, no aprendizado por reforço, quando vários agentes estão gerando, cada um, um dataset separado e você deseja carregar todos eles juntos. Outros casos de uso são quando um novo dataset é produzido regularmente, por exemplo, um novo dataset por dia, e você deseja carregar dados de um intervalo de datas.
Para carregar dados de múltiplas pastas, use tfds.builder_from_directories, que retorna um tfds.core.DatasetBuilder com a API TFDS padrão (como tfds.builder):
Observação: cada pasta deve ter seus próprios metadados, pois estes contêm informações sobre as divisões.
Estrutura de pastas (opcional)
Para melhor compatibilidade com TFDS, você pode organizar seus dados como <data_dir>/<dataset_name>[/<dataset_config>]/<dataset_version>. Por exemplo:
Isso deixará seus datasets compatíveis com a API tfds.load / tfds.builder, simplesmente fornecendo data_dir/: