Cheat Sheet: Handling von Datasets

Anzahl der Datensätze in einem Dataset ermitteln

anzahl = dataset.cardinality().numpy()

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)
Nach oben scrollen