|
|
|
|
TensorFlow — Dataset
Início
1. Introdução
A classe tf.data.Dataset
serve para representar conjuntos de elementos.
- Criação: Pode ser criado a partir de uma ou mais listas
dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
dataset = tf.data.Dataset.from_tensor_slices(([1, 2, 3, 4, 5], [6, 7, 8, 9, 10]))
- Visualização: Para ver o seu conteudo
for x in dataset:
print(x)
Nota: Vários exemplos foram retirados dos manuais (ver bibliografia).
Início
2. tf.data
- tf.data.TextLineDataset(fname, compression_type=None, ...):
Cria um Dataset que contém linhas de um ou mais ficheiros de texto.
Início
3. Criar um conjunto de Dataset de origem (tf.data.Dataset)
Vamos usar tf.data.Dataset para criar um pipeline para alimentar dados num modelo.
- Criar um conjunto de Dataset :
Bibliografia
Início
4. Métodos da classe Dataset
- batch: A partir do conjunto inicial de "Dataset",
cria "N" 'Dataset' conjuntos de dados consecutivos
dataset2 = dataset.batch(N, ...)
- cache: Guarda em "cache" os elementos do conjunto de dados "Dataset"
dataset = dataset.cache()
- cardinality: Retorna a cardinalidade do conjunto de dados
print(dataset.cardinality().numpy())
- concatenate: Junta dois conjuntos de dados "Dataset"
ds1 = tf.data.Dataset.range(1, 4)
ds2 = tf.data.Dataset.range(4, 8)
ds3 = ds1.concatenate(ds2)
- list_files: Retorna todos os ficheiros correspondentes a
file_pattern devidamente normalizados:
tf.data.Dataset.list_files(file_pattern, ...)
por defeito, as lista baralha a sequência dos ficheiros (shuffle=True) e
não é dada uma seed (seed=None).
- load: Permite ler um conjunto de dados "Dataset" de um ficheiro.
Ver save.
- map (map_func, ...):
Aplica a função map_func
a todos os elementos do conjunto de dados.
dataset = tf.data.Dataset.range(1, 6)
dataset = dataset.map(lambda x: x + 1)
O número de chamadas em paralelo (quantos cores do CPU utilizar) pode ser indicado pelo argumento
"num_parallel_calls" (default: None), se se atribuir o valor
"tf.data.AUTOTUNE" deixa-se à função a decisão sobre o valor mais conveniente.
- prefetch (buffer_size, ):
Cria um conjuntos de dados "Dataset" que pré-pesquisa elementos do conjunto de dados fornecido.
Este processo permite que os elementos seguintes sejam preparados enquanto o elemento actual está a ser processado.
Isto melhora a velocidade de processamento à custa do aumento da memória utilizada.
- random: Cria um conjuntos de dados "Dataset" com "N" elementos e seed "SEED"
dataset = tf.data.Dataset.random(seed=SEED).take(N)
- range: Cria um conjuntos de dados "Dataset" a partir de "range"
começando em "N1" e terminando em "N2-1" com passo "Step"
dataset = tf.data.Dataset.range(N1, N2, Step).as_numpy_iterator()
- rebatch: Cria um novo conjunto "Dataset" que reorganiza os elementos
dataset = tf.data.Dataset.range(6)
ds = ds.batch(2)
list(ds.as_numpy_iterator())
ds = ds.rebatch(3)
list(ds.as_numpy_iterator())
- repeat: Cria um novo conjunto de dados "Dataset" que repete o anterior "N" vezes
dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
dataset = dataset.repeat(3)
- save: Permite guarda um conjunto de dados "Dataset" num ficheiro.
Ver save.
- shuffle: Baralha o conjunto de dados, em que o primeiro argumento
é número de elementos do conjunto de dados a partir dos quais o novo conjunto de dados será amostrado. Exemplo:
dataset = tf.data.Dataset.range(10)
dataset = dataset.shuffle(dataset.cardinality())
for x in dataset.take(5): print(x.numpy(), end=" ; ")
print("")
- skip: A partir de um conjunto de dados "Dataset" cria outro que
ignora os seus "N" primeiros elementos
dataset = tf.data.Dataset.range(5)
dataset = dataset.skip(2)
- take: A partir de um conjunto de dados "Dataset" cria outro com
os seus "N" primeiros elementos
dataset = tf.data.Dataset.range(7)
dataset = dataset.take(4)
- unbatch: A partir de um conjunto de dados "Dataset" junta os conjuntos
divididos num único conjunto
dataset = tf.data.Dataset.range(10)
dataset = dataset.batch(3)
list(dataset.as_numpy_iterator())
dataset = dataset.unbatch()
list(dataset.as_numpy_iterator())
- unique: A partir de um conjunto de dados "Dataset"
remove os elementos repetidos:
dataset = tf.data.Dataset.range(4)
dataset = dataset.repeat(2)
list(dataset.as_numpy_iterator())
dataset = dataset.unique()
list(dataset.as_numpy_iterator())
- zip: A partir de dois conjuntos de dados "Dataset"
cria um novo combinando os seus elementos
ds1 = tf.data.Dataset.range(1, 4)
ds2 = tf.data.Dataset.range(4, 7)
ds3 = tf.data.Dataset.zip(ds1, ds2)
list(ds3.as_numpy_iterator())
Início
5. Bibliografia
Início
|
|
|
|