Anzahl der Datensätze in einem Dataset ermitteln
Folgendes Snippet funktioniert nur, wenn das Dataset nicht mit .repeat() wiederholt wurde.
anzahl = dataset.cardinality().numpy()
In Dataset „hineinsehen“
for data in dataset.take(1):
print(data)
Dataset in Train- und Validation-Datasets aufteilen
Ein Dataset muss z.B. in 2 Datasets gesplittet werden um ein Trainingsdataset (im Beispiel 80% des ursprünglichen Datasets) und ein Validationsdataset (im Beispiel 20% des ursprünglichen Datasets) zu erzeugen.
total_size = dataset.cardinality().numpy()
train_size = int(total_size * 0.8)
train_dataset = dataset.take(train_size)
val_dataset = dataset.skip(train_size)
String-Liste in Dataset umwandeln und zurückwandeln
labels = [0, 1, 0]
texte = ["Hallo", "Welt", "TensorFlow"]
# Dataset erstellen
dataset = tf.data.Dataset.from_tensor_slices((texte, labels))
# Zurück in Listen umwandeln
texte_liste = [x.numpy().decode("utf-8") for x, y in dataset]
labels_liste = [int(y.numpy()) for x, y in dataset]
Zahlen-Listen in Dataset umwandeln und zurückwandeln
labels = [0, 1, 0]
data = [[1, 2], [3, 4], [5, 6]]
# Dataset erstellen
dataset = tf.data.Dataset.from_tensor_slices((data, labels))
# Zurück in Listen umwandeln
data_list = []
label_list = []
for x, y in dataset:
data_list.append(x.numpy().tolist()) # x ist ein Tensor → Liste
label_list.append(int(y.numpy()))
Input-Dataset und Label-Dataset zusammenfügen bzw. wieder zerlegen
Um zwei Datasets, die z.B. einmal die Inputdaten enthalten und einmal die Labeldaten enthalten, zu einem Dataset zusammenzufügen, kann die zip()-Methode genutzt werden. Für das Zerlegen eines Datasets (mit zwei Sub-Datasets) in zwei Datasets gibt es keine „unzip()“-Methode – daher muss man den Umweg über die map()-Methode mit einer kleinen lambda-Funktion gehen.
tf.data.Dataset.zip((dataset_data, dataset_label))
# Und wieder zerlegen
# Jeweils nur das erste oder zweite Element aus dem Tupel extrahieren
dataset_data = zipped_ds.map(lambda data, label: data)
dataset_labels = zipped_ds.map(lambda data, label: label)
Typischer Workflow vor der Nutzung im Netzwerk
dataset = dataset.map(preprocessing_fn)
dataset = dataset.shuffle(1000)
dataset = dataset.batch(32)
dataset = dataset.prefetch(tf.data.AUTOTUNE)