Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/pt-br/datasets/overview.ipynb
25115 views
Kernel: Python 3

TensorFlow Datasets

A biblioteca TensorFlow Datasets (TFDS) fornece uma coleção de datasets prontos que podem ser usados com TensorFlow, Jax e outros frameworks de aprendizado de máquina.

Ela cuida do download e da preparação dos dados de forma determinística e da construção de um tf.data.Dataset (ou np.array).

Observação: Não confunda TFDS (esta biblioteca) com tf.data (API TensorFlow para construir pipelines de dados eficientes). TFDS é um wrapper de alto nível em torno de tf.data. Se você não estiver familiarizado com esta API, recomendamos que você leia primeiro o guia oficial do tf.data.

Copyright 2020 The TensorFlow Datasets Authors, Licensed under the Apache License, Version 2.0

Instalação

A biblioteca TFDS existe em dois pacotes:

  • pip install tensorflow-datasets: a versão estável, lançada a cada poucos meses.

  • pip install tfds-nightly: lançada todos os dias, contém as últimas versões dos datasets.

Este colab usa tfds-nightly:

!pip install -q tfds-nightly tensorflow matplotlib
import matplotlib.pyplot as plt import numpy as np import tensorflow as tf import tensorflow_datasets as tfds

Encontre datasets disponíveis

Todos os construtores de datasets são subclasses de tfds.core.DatasetBuilder. Para obter a lista de construtores disponíveis, use tfds.list_builders() ou consulte nosso catálogo.

tfds.list_builders()

Carregue um dataset

tfds.load

A maneira mais fácil de carregar um datasets é usando tfds.load. Ele vai:

  1. Baixar os dados e salvá-os como arquivos tfrecord.

  2. Carregar o tfrecord e criar o tf.data.Dataset.

ds = tfds.load('mnist', split='train', shuffle_files=True) assert isinstance(ds, tf.data.Dataset) print(ds)

Alguns argumentos comuns:

  • split=: qual divisão ler (por exemplo, 'train', ['train', 'test'], 'train[80%:]',...). Consulte o guia da API split.

  • shuffle_files=: controla se os arquivos devem ser embaralhados entre cada época (o TFDS armazena grandes datasets em múltiplos arquivos menores).

  • data_dir=: local onde o dataset é salvo (o padrão é ~/tensorflow_datasets/)

  • with_info=True: retorna tfds.core.DatasetInfo contendo metadados do dataset

  • download=False: desativa o download

tfds.builder

tfds.load é um wrapper estreito em torno de tfds.core.DatasetBuilder. Você pode obter a mesma saída usando a API tfds.core.DatasetBuilder:

builder = tfds.builder('mnist') # 1. Create the tfrecord files (no-op if already exists) builder.download_and_prepare() # 2. Load the `tf.data.Dataset` ds = builder.as_dataset(split='train', shuffle_files=True) print(ds)

tfds build CLI

Se quiser gerar um dataset específico, você pode usar a linha de comando tfds. Por exemplo:

tfds build mnist

Consulte a documentação para conhecer os sinalizadores disponíveis.

Itere sobre um dataset

Como um dict

Por padrão, o objeto tf.data.Dataset contém um dict de objetos tf.Tensor:

ds = tfds.load('mnist', split='train') ds = ds.take(1) # Only take a single example for example in ds: # example is `{'image': tf.Tensor, 'label': tf.Tensor}` print(list(example.keys())) image = example["image"] label = example["label"] print(image.shape, label)

Para descobrir os nomes das chaves de um dict e sua estrutura, consulte a documentação do dataset no nosso catálogo. Por exemplo: a documentação do mnist.

Como tupla (as_supervised=True)

Ao usar as_supervised=True, você pode obter uma tupla (features, label) para datasets supervisionados.

ds = tfds.load('mnist', split='train', as_supervised=True) ds = ds.take(1) for image, label in ds: # example is (image, label) print(image.shape, label)

Como numpy (tfds.as_numpy)

Usa tfds.as_numpy para converter:

  • tf.Tensor -> np.array

  • tf.data.Dataset -> Iterator[Tree[np.array]] (Tree pode ser Dict aninhada arbitrariamente, Tuple)

ds = tfds.load('mnist', split='train', as_supervised=True) ds = ds.take(1) for image, label in tfds.as_numpy(ds): print(type(image), type(label), label)

Como tf.Tensor em lote (batch_size=-1)

Usando batch_size=-1, você pode carregar o dataset completo num único lote.

Isto pode ser combinado com as_supervised=True e tfds.as_numpy para obter os dados como (np.array, np.array):

image, label = tfds.as_numpy(tfds.load( 'mnist', split='test', batch_size=-1, as_supervised=True, )) print(type(image), image.shape)

Tenha cuidado para que seu dataset caiba na memória e para que todos os exemplos tenham o mesmo formato.

Faça benchmark dos seus datasets

O benchmarking de um dataset é uma chamada simples tfds.benchmark em qualquer iterável (por exemplo, tf.data.Dataset, tfds.as_numpy,...).

ds = tfds.load('mnist', split='train') ds = ds.batch(32).prefetch(1) tfds.benchmark(ds, batch_size=32) tfds.benchmark(ds, batch_size=32) # Second epoch much faster due to auto-caching
  • Não esqueça de normalizar os resultados por tamanho de lote com o kwarg batch_size=.

  • No resumo, o primeiro lote de aquecimento é separado dos demais para capturar o tempo extra de configuração tf.data.Dataset (por exemplo, inicialização de buffers,...).

  • Observe como a segunda iteração é muito mais rápida devido ao cache automático do TFDS.

  • O tfds.benchmark retorna um tfds.core.BenchmarkResult que pode ser inspecionado para análise posterior.

Crie um pipeline de ponta a ponta

Para ir mais longe, você pode explorar:

  • Nosso exemplo Keras ponta a ponta para ver um pipeline de treinamento completo (com lote, embaralhamento,...).

  • Nosso guia de desempenho para melhorar a velocidade de seus pipelines (dica: use tfds.benchmark(ds) para fazer benchmark dos seus datasets).

Visualização

tfds.as_dataframe

Os objetos tf.data.Dataset podem ser convertidos em pandas.DataFrame com tfds.as_dataframe para serem visualizados no Colab.

  • Adicione o tfds.core.DatasetInfo como segundo argumento de tfds.as_dataframe para visualizar imagens, áudio, textos, vídeos,...

  • Use ds.take(x) para exibir apenas os primeiros x exemplos. pandas.DataFrame carregará o dataset completo na memória o que pode exigir muitos recursos para exibir.

ds, info = tfds.load('mnist', split='train', with_info=True) tfds.as_dataframe(ds.take(4), info)

tfds.show_examples

tfds.show_examples retorna um matplotlib.figure.Figure (no momento, somente datasets de imagem são suportados):

ds, info = tfds.load('mnist', split='train', with_info=True) fig = tfds.show_examples(ds, info)

Acesse os metadados do dataset

Todos os construtores incluem um objeto tfds.core.DatasetInfo contendo os metadados do dataset.

Ele pode ser acessado através das seguintes APIs:

  • tfds.load:

ds, info = tfds.load('mnist', with_info=True)
  • tfds.core.DatasetBuilder:

builder = tfds.builder('mnist') info = builder.info

O dataset info contêm informações adicionais sobre o dataset (versão, citação, página inicial, descrição,...).

print(info)

Metadados de características (nomes de rótulos, formato de imagem,...)

Acesse tfds.features.FeatureDict:

info.features

Número de classes, nomes de rótulos:

print(info.features["label"].num_classes) print(info.features["label"].names) print(info.features["label"].int2str(7)) # Human readable version (8 -> 'cat') print(info.features["label"].str2int('7'))

Formatos, dtypes:

print(info.features.shape) print(info.features.dtype) print(info.features['image'].shape) print(info.features['image'].dtype)

Metadados de divisão (por exemplo, nomes de splits, número de exemplos,...)

Acesse tfds.core.SplitDict:

print(info.splits)

Divisões (splits) disponíveis:

print(list(info.splits.keys()))

Obtenha informações sobre a divisão individual:

print(info.splits['train'].num_examples) print(info.splits['train'].filenames) print(info.splits['train'].num_shards)

Também funciona com a API subsplit:

print(info.splits['train[15%:75%]'].num_examples) print(info.splits['train[15%:75%]'].file_instructions)

Solução de problemas

Download manual (se o download falhar)

Se o download falhar por algum motivo (por exemplo, offline,...). Você sempre pode baixar manualmente os dados e colocá-los no manual_dir (o padrão é ~/tensorflow_datasets/downloads/manual/.

Para descobrir quais URLs baixar, procure:

Corrigindo o NonMatchingChecksumError

A biblioteca TFDS garante o determinismo validandoos checksums das URLs baixadas. Se um NonMatchingChecksumError for lançado, isto pode indicar que:

  • O site pode estar fora do ar (por exemplo, 503 status code). Por favor, verifique a URL.

  • Para URLs do Google Drive, tente novamente mais tarde, pois o Drive às vezes rejeita downloads quando muitas pessoas acessam a mesmo URL. Veja bug

  • Os arquivos dos datasets originais podem ter sido alterados. Neste caso, o construtor do conjunto de dados TFDS deve ser atualizado. Abra um novo issue no GitHub ou envie um pull request:

    • Registre os novos checksums com tfds build --register_checksums

    • Em algum momento, atualize o código de geração do dataset.

    • Atualize a VERSION do dataset

    • Atualize as RELEASE_NOTES do dataset: o que causou a alteração dos checksums? Alguns exemplos mudaram?

    • Garanta que o dataset ainda possa ser compilado.

    • Envie-nos um pull request

Observação: você também pode inspecionar o arquivo baixado em ~/tensorflow_datasets/download/.

Citação

Se você estiver usando o tensorflow-datasets num artigo, inclua a citação a seguir, além de qualquer citação específica dos datasets usados ​​(que pode ser encontrada no catálogo de datasets).

@misc{TFDS, title = { {TensorFlow Datasets}, A collection of ready-to-use datasets}, howpublished = {\url{https://www.tensorflow.org/datasets}}, }