Kursinhalt
Einführung in TensorFlow
Einführung in TensorFlow
Transformationen
Tensor-Transformationen
Willkommen zurück! Heute werden wir tiefer in fortgeschrittene Operationen eintauchen: Transformation von Tensors.
Tensor-Transformationen sind entscheidend bei der Arbeit mit Daten. Wenn Sie sich weiter mit Aufgaben des Deep Learning und der Datenwissenschaft beschäftigen, werden Sie feststellen, dass die Daten, mit denen Sie arbeiten, nicht immer im benötigten Format vorliegen. Diese Lektion führt Sie in Methoden in TensorFlow ein, die es Ihnen ermöglichen, die Struktur und den Inhalt von Tensors zu manipulieren, um Ihren Anforderungen gerecht zu werden.
Umformen von Tensors
Bei der Arbeit mit Tensors gibt es Zeiten, in denen Sie die Form ändern müssen, ohne die zugrunde liegenden Daten zu verändern. tf.reshape()
ist in solchen Zeiten nützlich.
Wie es funktioniert:
- Das Umformen ändert die Struktur des Tensors, aber nicht seine Daten. Die Gesamtanzahl der Elemente vor und nach dem Umformen muss gleich bleiben;
- Es funktioniert, indem die neue Form zeilenweise (von links nach rechts, von oben nach unten) "gefüllt" wird.
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)
Hinweis
Wenn Sie die neue Form angeben, 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 Sie Tensors in ein neuronales Netzwerk einspeisen möchten, aber die Dimensionen nicht mit der Eingabeform des Netzwerks übereinstimmen.
Slicing
Slicing hilft Ihnen, einen Teil eines Tensors abzurufen. Es ist analog zum Listenslicing in Python, aber erweitert auf mehrdimensionale Tensors.
Wie es funktioniert:
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, bedeutet dies alle Elemente in dieser Dimension.
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)
Hinweis
Denken Sie immer an das nullbasierte Indexieren von TensorFlow, das dem nativen Indexieren von Python ähnelt.
Daten modifizieren
Es gibt eine andere Möglichkeit des Slicings, die es Ihnen auch ermöglicht, die ursprünglichen Daten zu ändern, ähnlich wie beim Slicing von Arrays in NumPy.
Wie es funktioniert:
- Mit
[]
können Sie Tensoren einfach slicen und indizieren, ähnlich wie beim NumPy-Slicing. Dieser Ansatz ermöglicht es Ihnen, bestimmte Zeilen, Spalten oder Elemente eines Tensors auszuwählen; - Mit
tf.Variable()
wird der Tensor veränderbar, sodass direkte Änderungen durch Slicing möglich sind; - Um die Werte des ausgewählten Subtensors zu ändern, verwenden Sie die
.assign()
-Methode mit einem Tensor oder einer Liste, die seiner Form entspricht.
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)
Hinweis
- Die Slicing-Syntax in TensorFlow ist stark von NumPy inspiriert. Wenn Sie mit NumPy vertraut sind, ist der Übergang zum Slicing-Mechanismus von TensorFlow einfach;
- Stellen Sie immer sicher, dass Sie
tf.Variable()
für alle Operationen verwenden, die Tensor-Mutabilität erfordern.
Verkettung
Die Verkettung ermöglicht es Ihnen, mehrere Tensoren entlang einer angegebenen Achse zu verbinden.
Wie es funktioniert:
tf.concat()
kombiniert Tensoren. Die Methode erfordert eine Liste von Tensoren, die Sie verketten möchten, und die Achse, entlang der die Operation ausgeführt werden soll;- Die Achse ist nullbasiert. Eine Achse von
0
bezieht sich auf Zeilen (vertikal) und eine Achse von1
bezieht sich auf Spalten (horizontal).
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)
Hinweis
- Stellen Sie sicher, dass die Tensoren, die Sie verbinden, übereinstimmende Dimensionen auf den nicht zusammengefügten Achsen haben;
- Diese Operation ähnelt
numpy.concatenate()
, ist jedoch für TensorFlow-Tensoren angepasst.
Swipe to start coding
Hintergrund
Sie arbeiten an einem Datensatz, der aus Messwerten von verschiedenen Sensoren besteht, die an unterschiedlichen geografischen Standorten platziert sind. Diese Sensoren erfassen wetterbezogene Daten wie Temperatur, Druck und normalisierte geografische Koordinaten.
Beim Zusammenstellen der Messwerte haben Sie jedoch festgestellt, dass einige der Daten falsch aufgezeichnet wurden.
Sie haben auch neue Messwerte von anderen Sensoren erhalten, die Sie einbeziehen müssen.
Datensatzinformationen
-
main_dataset
: Ein Tensor der Form(6, 4)
, der 6 Messwerte darstellt. Jede Zeile ist eine Probe, und die Spalten repräsentieren die folgenden Merkmale:- Temperatur (in Celsius).
- Druck (in hPa).
- Normalisierte Breitengradkoordinate.
- Normalisierte Längengradkoordinate.
-
error_correction_data
: Ein Tensor der Form(2, 4)
, der 2 korrigierte Messwerte für fehlerhafte Daten im Hauptdatensatz darstellt. -
additional_data
: Ein Tensor der Form(3, 4)
, der 3 neue Messwerte darstellt.
Ziel
Bereiten Sie einen korrigierten und vollständigen Datensatz für die Wettervorhersage vor:
-
Datenkorrektur:
- Sie haben festgestellt, dass die Messwerte in der 2. und 5. Zeile des
main_dataset
ungenau waren. Ersetzen Sie diese Zeilen immain_dataset
durch die Zeilen auserror_correction_data
.
- Sie haben festgestellt, dass die Messwerte in der 2. und 5. Zeile des
-
Zusätzliche Daten einbeziehen:
- Fügen Sie das
main_dataset
mitadditional_data
zusammen, um die neuen Messwerte einzubeziehen.
- Fügen Sie das
-
Batch-Umformung:
- Für das Batch-Training möchten Sie den Datensatz in Batches mit 3 Messwerten pro Batch aufteilen. Formen Sie
complete_dataset
um, wobei die erste Dimension die Batch-Größe darstellt und die zweite Dimension die Anzahl der Messwerte pro Batch.
- Für das Batch-Training möchten Sie den Datensatz in Batches mit 3 Messwerten pro Batch aufteilen. Formen Sie
Lösung
Danke für Ihr Feedback!
Transformationen
Tensor-Transformationen
Willkommen zurück! Heute werden wir tiefer in fortgeschrittene Operationen eintauchen: Transformation von Tensors.
Tensor-Transformationen sind entscheidend bei der Arbeit mit Daten. Wenn Sie sich weiter mit Aufgaben des Deep Learning und der Datenwissenschaft beschäftigen, werden Sie feststellen, dass die Daten, mit denen Sie arbeiten, nicht immer im benötigten Format vorliegen. Diese Lektion führt Sie in Methoden in TensorFlow ein, die es Ihnen ermöglichen, die Struktur und den Inhalt von Tensors zu manipulieren, um Ihren Anforderungen gerecht zu werden.
Umformen von Tensors
Bei der Arbeit mit Tensors gibt es Zeiten, in denen Sie die Form ändern müssen, ohne die zugrunde liegenden Daten zu verändern. tf.reshape()
ist in solchen Zeiten nützlich.
Wie es funktioniert:
- Das Umformen ändert die Struktur des Tensors, aber nicht seine Daten. Die Gesamtanzahl der Elemente vor und nach dem Umformen muss gleich bleiben;
- Es funktioniert, indem die neue Form zeilenweise (von links nach rechts, von oben nach unten) "gefüllt" wird.
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)
Hinweis
Wenn Sie die neue Form angeben, 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 Sie Tensors in ein neuronales Netzwerk einspeisen möchten, aber die Dimensionen nicht mit der Eingabeform des Netzwerks übereinstimmen.
Slicing
Slicing hilft Ihnen, einen Teil eines Tensors abzurufen. Es ist analog zum Listenslicing in Python, aber erweitert auf mehrdimensionale Tensors.
Wie es funktioniert:
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, bedeutet dies alle Elemente in dieser Dimension.
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)
Hinweis
Denken Sie immer an das nullbasierte Indexieren von TensorFlow, das dem nativen Indexieren von Python ähnelt.
Daten modifizieren
Es gibt eine andere Möglichkeit des Slicings, die es Ihnen auch ermöglicht, die ursprünglichen Daten zu ändern, ähnlich wie beim Slicing von Arrays in NumPy.
Wie es funktioniert:
- Mit
[]
können Sie Tensoren einfach slicen und indizieren, ähnlich wie beim NumPy-Slicing. Dieser Ansatz ermöglicht es Ihnen, bestimmte Zeilen, Spalten oder Elemente eines Tensors auszuwählen; - Mit
tf.Variable()
wird der Tensor veränderbar, sodass direkte Änderungen durch Slicing möglich sind; - Um die Werte des ausgewählten Subtensors zu ändern, verwenden Sie die
.assign()
-Methode mit einem Tensor oder einer Liste, die seiner Form entspricht.
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)
Hinweis
- Die Slicing-Syntax in TensorFlow ist stark von NumPy inspiriert. Wenn Sie mit NumPy vertraut sind, ist der Übergang zum Slicing-Mechanismus von TensorFlow einfach;
- Stellen Sie immer sicher, dass Sie
tf.Variable()
für alle Operationen verwenden, die Tensor-Mutabilität erfordern.
Verkettung
Die Verkettung ermöglicht es Ihnen, mehrere Tensoren entlang einer angegebenen Achse zu verbinden.
Wie es funktioniert:
tf.concat()
kombiniert Tensoren. Die Methode erfordert eine Liste von Tensoren, die Sie verketten möchten, und die Achse, entlang der die Operation ausgeführt werden soll;- Die Achse ist nullbasiert. Eine Achse von
0
bezieht sich auf Zeilen (vertikal) und eine Achse von1
bezieht sich auf Spalten (horizontal).
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)
Hinweis
- Stellen Sie sicher, dass die Tensoren, die Sie verbinden, übereinstimmende Dimensionen auf den nicht zusammengefügten Achsen haben;
- Diese Operation ähnelt
numpy.concatenate()
, ist jedoch für TensorFlow-Tensoren angepasst.
Swipe to start coding
Hintergrund
Sie arbeiten an einem Datensatz, der aus Messwerten von verschiedenen Sensoren besteht, die an unterschiedlichen geografischen Standorten platziert sind. Diese Sensoren erfassen wetterbezogene Daten wie Temperatur, Druck und normalisierte geografische Koordinaten.
Beim Zusammenstellen der Messwerte haben Sie jedoch festgestellt, dass einige der Daten falsch aufgezeichnet wurden.
Sie haben auch neue Messwerte von anderen Sensoren erhalten, die Sie einbeziehen müssen.
Datensatzinformationen
-
main_dataset
: Ein Tensor der Form(6, 4)
, der 6 Messwerte darstellt. Jede Zeile ist eine Probe, und die Spalten repräsentieren die folgenden Merkmale:- Temperatur (in Celsius).
- Druck (in hPa).
- Normalisierte Breitengradkoordinate.
- Normalisierte Längengradkoordinate.
-
error_correction_data
: Ein Tensor der Form(2, 4)
, der 2 korrigierte Messwerte für fehlerhafte Daten im Hauptdatensatz darstellt. -
additional_data
: Ein Tensor der Form(3, 4)
, der 3 neue Messwerte darstellt.
Ziel
Bereiten Sie einen korrigierten und vollständigen Datensatz für die Wettervorhersage vor:
-
Datenkorrektur:
- Sie haben festgestellt, dass die Messwerte in der 2. und 5. Zeile des
main_dataset
ungenau waren. Ersetzen Sie diese Zeilen immain_dataset
durch die Zeilen auserror_correction_data
.
- Sie haben festgestellt, dass die Messwerte in der 2. und 5. Zeile des
-
Zusätzliche Daten einbeziehen:
- Fügen Sie das
main_dataset
mitadditional_data
zusammen, um die neuen Messwerte einzubeziehen.
- Fügen Sie das
-
Batch-Umformung:
- Für das Batch-Training möchten Sie den Datensatz in Batches mit 3 Messwerten pro Batch aufteilen. Formen Sie
complete_dataset
um, wobei die erste Dimension die Batch-Größe darstellt und die zweite Dimension die Anzahl der Messwerte pro Batch.
- Für das Batch-Training möchten Sie den Datensatz in Batches mit 3 Messwerten pro Batch aufteilen. Formen Sie
Lösung
Danke für Ihr Feedback!