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.
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()
.numpy()
convertit tf.Tensors en tableaux numpy-1
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.
Je pense que nous obtenons un bon exemple ici:
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.