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)