Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Transformationen | Tensor Operations and Execution
Einführung in TensorFlow

Transformationen

Tensor-Transformationen

Diese Lektion behandelt fortgeschrittene Operationen zur Transformation von Tensors.

Tensor-Transformationen sind unerlässlich bei der Datenverarbeitung. Mit zunehmender Beschäftigung mit Deep Learning und Data-Science-Aufgaben wird deutlich, dass die vorliegenden Daten nicht immer im gewünschten Format vorliegen. Diese Lektion stellt Methoden in TensorFlow vor, mit denen sich die Struktur und der Inhalt von Tensors gezielt anpassen lassen.

Umformen von Tensors

Beim Arbeiten mit Tensors ist es manchmal notwendig, die Form zu ändern, ohne die zugrunde liegenden Daten zu verändern. tf.reshape() ist in solchen Fällen hilfreich.

Funktionsweise:

  • Das Umformen ändert die Struktur des Tensors, aber nicht dessen Daten. Die Gesamtanzahl der Elemente muss vor und nach dem Umformen gleich bleiben;
  • Die Operation "füllt" die neue Form zeilenweise (von links nach rechts, von oben nach unten) auf.
umformen
1234567891011121314
import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Note
Hinweis

Beim Festlegen der neuen Form kann eine Dimension -1 sein. TensorFlow berechnet die Größe dieser Dimension so, dass die Gesamtgröße konstant bleibt.

Dies ist besonders nützlich, wenn Tensoren in ein neuronales Netzwerk eingespeist werden sollen, die Dimensionen jedoch nicht mit der Eingabeform des Netzwerks übereinstimmen.

Slicing

Slicing ermöglicht das Abrufen eines Teils eines Tensors. Es ist vergleichbar mit dem Listenslicing in Python, aber auf mehrdimensionale Tensoren erweitert.

Funktionsweise:

  • tf.slice() extrahiert einen Ausschnitt aus einem Tensor. Es erfordert den Startindex für den Ausschnitt und die Größe des Ausschnitts;
  • Wenn die Größe -1 ist, werden alle Elemente in dieser Dimension ausgewählt.
slice
12345678910111213
import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Note
Hinweis

Beachte stets das nullbasierte Indexieren in TensorFlow, das dem nativen Indexieren von Python entspricht. Nützlich zum Extrahieren bestimmter Merkmale oder Datenpunkte aus einem größeren Datensatz.

Daten modifizieren

Es gibt eine weitere Möglichkeit des Slicings, die es ebenfalls erlaubt, die Originaldaten zu verändern, ähnlich wie beim Slicing von Arrays in NumPy.

Funktionsweise:

  • Mit [] können Tensoren einfach gesliced und indiziert werden, vergleichbar mit NumPy-Slicing. Diese Methode ermöglicht die Auswahl bestimmter Zeilen, Spalten oder Elemente eines Tensors;
  • Mit tf.Variable() wird der Tensor veränderbar, sodass direkte Modifikationen per Slicing möglich sind;
  • Um die Werte des ausgewählten Subtensors zu ändern, wird die Methode .assign() mit einem Tensor oder einer Liste verwendet, die die gleiche Form besitzt.
assign
12345678910111213
import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
Note
Hinweis
  • Die Slicing-Syntax in TensorFlow ist größtenteils von NumPy inspiriert. Wenn du mit NumPy vertraut bist, ist der Übergang zum Slicing-Mechanismus von TensorFlow unkompliziert;
  • Stelle immer sicher, dass du tf.Variable() für alle Operationen verwendest, die die Veränderbarkeit von Tensors erfordern.

Konkatenation

Konkatenation ermöglicht das Zusammenfügen mehrerer Tensors entlang einer angegebenen Achse.

Funktionsweise:

  • tf.concat() verbindet Tensors. Die Methode benötigt eine Liste von Tensors, die zusammengefügt werden sollen, sowie die Achse, entlang der die Operation ausgeführt wird;
  • Die Achse ist nullbasiert. Eine Achse von 0 bezieht sich auf Zeilen (vertikal) und eine Achse von 1 auf Spalten (horizontal).
concat_fixed
123456789101112131415161718
import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
Note
Hinweis
  • Stelle sicher, dass die Tensoren, die zusammengefügt werden, auf den nicht-konkatenierenden Achsen übereinstimmende Dimensionen haben;
  • Diese Operation ähnelt numpy.concatenate(), ist jedoch speziell für TensorFlow-Tensoren ausgelegt.
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
single

single

Transformationen

Swipe um das Menü anzuzeigen

Tensor-Transformationen

Diese Lektion behandelt fortgeschrittene Operationen zur Transformation von Tensors.

Tensor-Transformationen sind unerlässlich bei der Datenverarbeitung. Mit zunehmender Beschäftigung mit Deep Learning und Data-Science-Aufgaben wird deutlich, dass die vorliegenden Daten nicht immer im gewünschten Format vorliegen. Diese Lektion stellt Methoden in TensorFlow vor, mit denen sich die Struktur und der Inhalt von Tensors gezielt anpassen lassen.

Umformen von Tensors

Beim Arbeiten mit Tensors ist es manchmal notwendig, die Form zu ändern, ohne die zugrunde liegenden Daten zu verändern. tf.reshape() ist in solchen Fällen hilfreich.

Funktionsweise:

  • Das Umformen ändert die Struktur des Tensors, aber nicht dessen Daten. Die Gesamtanzahl der Elemente muss vor und nach dem Umformen gleich bleiben;
  • Die Operation "füllt" die neue Form zeilenweise (von links nach rechts, von oben nach unten) auf.
umformen
1234567891011121314
import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Note
Hinweis

Beim Festlegen der neuen Form kann eine Dimension -1 sein. TensorFlow berechnet die Größe dieser Dimension so, dass die Gesamtgröße konstant bleibt.

Dies ist besonders nützlich, wenn Tensoren in ein neuronales Netzwerk eingespeist werden sollen, die Dimensionen jedoch nicht mit der Eingabeform des Netzwerks übereinstimmen.

Slicing

Slicing ermöglicht das Abrufen eines Teils eines Tensors. Es ist vergleichbar mit dem Listenslicing in Python, aber auf mehrdimensionale Tensoren erweitert.

Funktionsweise:

  • tf.slice() extrahiert einen Ausschnitt aus einem Tensor. Es erfordert den Startindex für den Ausschnitt und die Größe des Ausschnitts;
  • Wenn die Größe -1 ist, werden alle Elemente in dieser Dimension ausgewählt.
slice
12345678910111213
import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Note
Hinweis

Beachte stets das nullbasierte Indexieren in TensorFlow, das dem nativen Indexieren von Python entspricht. Nützlich zum Extrahieren bestimmter Merkmale oder Datenpunkte aus einem größeren Datensatz.

Daten modifizieren

Es gibt eine weitere Möglichkeit des Slicings, die es ebenfalls erlaubt, die Originaldaten zu verändern, ähnlich wie beim Slicing von Arrays in NumPy.

Funktionsweise:

  • Mit [] können Tensoren einfach gesliced und indiziert werden, vergleichbar mit NumPy-Slicing. Diese Methode ermöglicht die Auswahl bestimmter Zeilen, Spalten oder Elemente eines Tensors;
  • Mit tf.Variable() wird der Tensor veränderbar, sodass direkte Modifikationen per Slicing möglich sind;
  • Um die Werte des ausgewählten Subtensors zu ändern, wird die Methode .assign() mit einem Tensor oder einer Liste verwendet, die die gleiche Form besitzt.
assign
12345678910111213
import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
Note
Hinweis
  • Die Slicing-Syntax in TensorFlow ist größtenteils von NumPy inspiriert. Wenn du mit NumPy vertraut bist, ist der Übergang zum Slicing-Mechanismus von TensorFlow unkompliziert;
  • Stelle immer sicher, dass du tf.Variable() für alle Operationen verwendest, die die Veränderbarkeit von Tensors erfordern.

Konkatenation

Konkatenation ermöglicht das Zusammenfügen mehrerer Tensors entlang einer angegebenen Achse.

Funktionsweise:

  • tf.concat() verbindet Tensors. Die Methode benötigt eine Liste von Tensors, die zusammengefügt werden sollen, sowie die Achse, entlang der die Operation ausgeführt wird;
  • Die Achse ist nullbasiert. Eine Achse von 0 bezieht sich auf Zeilen (vertikal) und eine Achse von 1 auf Spalten (horizontal).
concat_fixed
123456789101112131415161718
import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
Note
Hinweis
  • Stelle sicher, dass die Tensoren, die zusammengefügt werden, auf den nicht-konkatenierenden Achsen übereinstimmende Dimensionen haben;
  • Diese Operation ähnelt numpy.concatenate(), ist jedoch speziell für TensorFlow-Tensoren ausgelegt.
Aufgabe

Wischen, um mit dem Codieren zu beginnen

Hintergrund

Sie arbeiten mit einem Datensatz, der Messwerte von verschiedenen Sensoren enthält, die an unterschiedlichen geografischen Standorten platziert sind. Diese Sensoren erfassen wetterbezogene Daten wie Temperatur, Luftdruck und normalisierte geografische Koordinaten.

Beim Zusammenstellen der Messwerte haben Sie jedoch festgestellt, dass einige Daten fehlerhaft aufgezeichnet wurden.

Zusätzlich haben Sie neue Messwerte von weiteren Sensoren erhalten, die integriert werden müssen.

Datensatzinformationen

  1. main_dataset: Ein Tensor der Form (6, 4), der 6 Messungen repräsentiert. Jede Zeile ist eine Stichprobe, die Spalten stehen für folgende Merkmale:

    • Temperatur (in Celsius);
    • Luftdruck (in hPa);
    • Normalisierte Breitengrad-Koordinate;
    • Normalisierte Längengrad-Koordinate.
  2. error_correction_data: Ein Tensor der Form (2, 4), der 2 korrigierte Messwerte für fehlerhafte Daten im Hauptdatensatz enthält.

  3. additional_data: Ein Tensor der Form (3, 4), der 3 neue Messwerte enthält.

Zielsetzung

Erstellen Sie einen korrigierten und vollständigen Datensatz für Wettervorhersagen:

  1. Datenkorrektur:

    • Sie haben festgestellt, dass die Messwerte in der 2. und 5. Zeile des main_dataset ungenau waren. Ersetzen Sie diese Zeilen im main_dataset durch die Zeilen aus error_correction_data.
  2. Integration zusätzlicher Daten:

    • Fügen Sie das main_dataset mit additional_data zusammen, um die neuen Messwerte zu integrieren.
  3. Batch-Umformung:

    • Für das Batch-Training soll der Datensatz in Batches mit je 3 Messwerten pro Batch unterteilt werden. Formen Sie complete_dataset so um, dass die erste Dimension die Batchgröße und die zweite Dimension die Anzahl der Messwerte pro Batch darstellt.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

some-alt