Path: blob/master/site/pt-br/datasets/external_tfrecord.md
25115 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.SequenceExample
não é suportado, apenastf.train.Example
.Você precisa ser capaz de expressar
tf.train.Example
em 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-00001
mnist-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.features
numa 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.SplitInfo
e 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/
: