Path: blob/master/site/pt-br/datasets/tfless_tfds.ipynb
25115 views
Copyright 2023 The TensorFlow Datasets Authors.
TFDS para Jax e PyTorch
O TFDS sempre foi independente de framework. Por exemplo, você pode carregar facilmente datasets no formato NumPy para uso em Jax e PyTorch.
O TensorFlow e sua solução de carregamento de dados (tf.data
) são cidadãos de primeira classe em nossa API por design.
Estendemos o TFDS para oferecer suporte ao carregamento de dados em NumPy puro sem TensorFlow. Isto pode ser conveniente para uso em estruturas de aprendizado de máquina, como Jax e PyTorch. Na verdade, para esses últimos usuários, o TensorFlow pode:
reservar memória GPU/TPU;
aumentar o tempo de construção em CI/CD;
levar um tempo para importar em tempo de execução.
O TensorFlow não é mais uma dependência para a leitura de datasets.
Os pipelines de aprendizado de máquina precisam de um carregador de dados para carregar exemplos, decodificá-los e apresentá-los ao modelo. Os carregadores de dados usam o paradigma "fonte/amostrador/carregador":
A fonte de dados é responsável por acessar e decodificar exemplos de um dataset TFDS em tempo real.
O amostrador de índice é responsável por determinar a ordem em que os registros são processados. Isto é importante para implementar transformações globais (por exemplo, embaralhamento global, fragmentação, repetição para múltiplas épocas) antes de ler quaisquer registros.
O carregador de dados orquestra o carregamento aproveitando a fonte de dados e o amostrador de índice. Permite otimização de desempenho (por exemplo, pré-busca, multiprocessamento ou multithreading).
Resumo
tfds.data_source
é uma API para criar fontes de dados:
para prototipagem rápida em pipelines de Python puro;
para gerenciar pipelines de aprendizagem de máquina com uso intensivo de dados em escala.
Configuração
Vamos instalar e importar as dependências necessárias:
Fontes de dados
Fontes de dados são basicamente sequências Python. Portanto, elas precisam implementar o seguinte protocolo:
Aviso: a API ainda está em desenvolvimento. Neste ponto em particular, __getitem__
deve suportar int
e list[int]
em entradas. No futuro, provavelmente só suportará int
conformeo padrão.
O formato de arquivo subjacente precisa suportar acesso aleatório eficiente. No momento, o TFDS depende de array_record
.
array_record
é um novo formato de arquivo derivado de Riegeli, atingindo uma nova fronteira de eficiência em entrada e saída. O ArrayRecord suporta leitura paralela, gravação e acesso aleatório por índice de registros. ArrayRecord é baseado em Riegeli e oferece suporte aos mesmos algoritmos de compactação.
fashion_mnist
é um dataset comum para visão computacional. Para recuperar uma fonte de dados baseada em ArrayRecord com TFDS, basta usar:
tfds.data_source
é um wrapper conveniente. É equivalente a:
Isso gera como saída um dicionário de fontes de dados:
Depois que download_and_prepare
for executado e você gerar os arquivos de registro, não precisaremos mais do TensorFlow. Tudo acontecerá em Python/NumPy!
Vamos verificar isso desinstalando o TensorFlow e recarregando a fonte de dados em outro subprocesso:
Em versões futuras, também faremos com que a preparação do dataset seja independente do TensorFlow.
Uma fonte de dados tem um comprimento:
Acessar o primeiro elemento do dataset:
...é tão barato quanto acessar qualquer outro elemento. Esta é a definição de acesso aleatório:
Características agora usam o NumPy DTypes (em vez de TensorFlow DTypes). Você pode inspecionar as características com:
Você encontrará mais informações sobre as características na nossa documentação. Aqui podemos recuperar a forma das imagens e o número de classes:
Uso em Python puro
Você pode consumir fontes de dados em Python iterando sobre elas:
Se você inspecionar elementos, também perceberá que todas as características já estão decodificadas usando NumPy. Nos bastidores, usamos OpenCV por padrão porque é rápido. Se você não tiver o OpenCV instalado, usaremos como padrão o Pillow para obter decodificação de imagem leve e rápida.
Observação: Atualmente, o recurso está disponível apenas para características de Tensor
, Image
e Scalar
. As características de Audio
e Video
chegarão em breve. Fique atento!
Uso com PyTorch
O PyTorch usa o paradigma fonte/amostrador/carregador. No Torch, as "fontes de dados" são chamadas de "datasets". torch.utils.data
contém todos os detalhes que você precisa saber para construir pipelines de entrada eficientes no Torch.
As fontes de dados TFDS podem ser usadas como datasets em estilo de mapa comuns.
Primeiro instalamos e importamos o Torch:
Já definimos fontes de dados para treinamento e teste (respectivamente, ds['train']
e ds['test']
). Agora podemos definir o amostrador e os carregadores:
Usando o PyTorch, treinamos e avaliamos uma regressão logística simples nos primeiros exemplos:
Em breve: uso com JAX
Estamos trabalhando em estreita colaboração com o Grain. O Grain é um carregador de dados de código aberto, rápido e determinístico para Python. Então fique ligado!
Saiba mais
Para mais informações, consulte o documento da API tfds.data_source
.