web-dev-qa-db-fra.com

Comment extraire des données / étiquettes à partir de l'ensemble de données TensorFlow

il existe de nombreux exemples pour créer et utiliser des ensembles de données TensorFlow, par exemple.

dataset = tf.data.Dataset.from_tensor_slices((images, labels))

Ma question est de savoir comment récupérer les données/étiquettes du jeu de données TF sous forme numpy? En d'autres termes, vouloir serait un fonctionnement inverse de la ligne ci-dessus, c'est-à-dire que j'ai un jeu de données TF et que je veux en récupérer des images et des étiquettes.

6
Valentin

En supposant que notre tf.data.Dataset s'appelle train_dataset, Avec eager_execution Activé, vous pouvez récupérer des images et des étiquettes comme ceci:

for images, labels in train_dataset.take(1):  # only take first element of dataset
    numpy_images = images.numpy()
    numpy_labels = labels.numpy()
  • l'opération en ligne .numpy() convertit tf.Tensors en tableaux numpy
  • si vous souhaitez récupérer plus d'éléments de l'ensemble de données, augmentez simplement le nombre à l'intérieur de la méthode take . Si vous voulez tous les éléments, insérez simplement -1
2
Tommaso Di Noto

Voici ma propre solution au problème:

def dataset2numpy(dataset, steps=1):
    "Helper function to get data/labels back from TF dataset"
    iterator = dataset.make_one_shot_iterator()
    next_val = iterator.get_next()
    with tf.Session() as sess:
        for _ in range(steps):
           inputs, labels = sess.run(next_val)
           yield inputs, labels

Veuillez noter que cette fonction produira des entrées/étiquettes de lot d'ensemble de données. Les étapes contrôlent le nombre de lots d'un ensemble de données qui seront supprimés.

1
Valentin

Je pense que nous obtenons un bon exemple ici:

https://colab.research.google.com/github/tensorflow/datasets/blob/master/docs/overview.ipynb#scrollTo=BC4pEXtkp4K-

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds

# where mnsit train is a tf dataset
mnist_train = tfds.load(name="mnist", split=tfds.Split.TRAIN)
assert isinstance(mnist_train, tf.data.Dataset)

mnist_example, = mnist_train.take(1)
image, label = mnist_example["image"], mnist_example["label"]

plt.imshow(image.numpy()[:, :, 0].astype(np.float32), cmap=plt.get_cmap("gray"))
print("Label: %d" % label.numpy())

Ainsi, chaque composant individuel de l'ensemble de données est accessible un peu comme un dictionnaire. On peut supposer que différents ensembles de données ont des noms de champs différents (le logement de Boston n'aura pas d'image et de valeur, mais pourrait avoir des "caractéristiques" et "cible" ou "prix":

cnn = tfds.load(name="cnn_dailymail", split=tfds.Split.TRAIN)
assert isinstance(cnn, tf.data.Dataset)
cnn_ex, = cnn.take(1)
print(cnn_ex)

renvoie un dict () avec les touches ['article', 'highlight'] avec des chaînes numpy à l'intérieur.

1
Dylan