Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Implementierung Neuronaler Netzwerke | Grundlagen von Tensorflow
Einführung in TensorFlow
Abschnitt 3. Kapitel 4
single

single

Implementierung Neuronaler Netzwerke

Swipe um das Menü anzuzeigen

Überblick über grundlegende neuronale Netzwerke

Sie haben nun einen Stand erreicht, an dem Sie über das notwendige Wissen zu TensorFlow verfügen, um eigene neuronale Netzwerke zu erstellen. Während die meisten neuronalen Netzwerke in der Praxis komplex sind und typischerweise mit High-Level-Bibliotheken wie Keras entwickelt werden, werden wir ein einfaches Netzwerk mit grundlegenden TensorFlow-Werkzeugen aufbauen. Dieser Ansatz ermöglicht praktische Erfahrungen mit Low-Level-Tensor-Manipulationen und hilft, die zugrunde liegenden Prozesse besser zu verstehen.

In früheren Kursen wie Einführung in neuronale Netzwerke erinnern Sie sich vielleicht daran, wie viel Zeit und Aufwand es gekostet hat, selbst ein einfaches neuronales Netzwerk zu erstellen, bei dem jedes Neuron einzeln behandelt wurde.

single_neuron_calc

TensorFlow vereinfacht diesen Prozess erheblich. Durch die Nutzung von Tensors können Sie komplexe Berechnungen kapseln und den Bedarf an aufwendigem Code reduzieren. Die Hauptaufgabe besteht darin, eine sequenzielle Pipeline von Tensor-Operationen einzurichten.

Hier eine kurze Auffrischung der Schritte, um einen Trainingsprozess für ein neuronales Netzwerk zu starten:

Datenvorbereitung und Modellerstellung

Die Anfangsphase des Trainings eines neuronalen Netzwerks umfasst die Vorbereitung der Daten, einschließlich der Eingaben und Ausgaben, von denen das Netzwerk lernen soll. Zusätzlich werden die Hyperparameter des Modells festgelegt – dies sind die Parameter, die während des gesamten Trainingsprozesses konstant bleiben. Die Gewichte werden initialisiert, typischerweise aus einer Normalverteilung gezogen, und die Biases werden häufig auf Null gesetzt.

Vorwärtsausbreitung

Bei der Vorwärtsausbreitung durchläuft jede Schicht des Netzwerks typischerweise folgende Schritte:

  1. Multiplikation des Schichteingangs mit den Gewichten.
  2. Addition eines Bias zum Ergebnis.
  3. Anwendung einer Aktivierungsfunktion auf diese Summe.
carousel-imgcarousel-imgcarousel-imgcarousel-imgcarousel-img

Dann kann der Verlust berechnet werden.

Rückwärtspropagation

Der nächste Schritt ist die Rückwärtspropagation, bei der Gewichte und Biases angepasst werden, basierend auf ihrem Einfluss auf den Verlust. Dieser Einfluss wird durch den Gradienten dargestellt, den TensorFlows Gradient Tape automatisch berechnet. Die Gewichte und Biases werden aktualisiert, indem der Gradient, skaliert mit der Lernrate, subtrahiert wird.

carousel-imgcarousel-imgcarousel-img

Trainingsschleife

Um das neuronale Netzwerk effektiv zu trainieren, werden die Trainingsschritte mehrfach wiederholt, während die Leistung des Modells überwacht wird. Idealerweise sollte der Loss über die Epochen hinweg abnehmen.

Aufgabe

Wischen, um mit dem Codieren zu beginnen

Erstellung eines neuronalen Netzwerks zur Vorhersage der Ergebnisse der XOR-Operation. Das Netzwerk soll aus 2 Eingabeneuronen, einer versteckten Schicht mit 2 Neuronen und 1 Ausgabeneuron bestehen.

  1. Initialisierung der Gewichte und Biases: Die Gewichte werden mit einer Normalverteilung initialisiert, die Biases werden alle auf Null gesetzt. Verwenden Sie die Hyperparameter input_size, hidden_size und output_size, um die passenden Formen für diese Tensoren zu definieren.
  2. Verwenden Sie einen Funktions-Dekorator, um die Funktion train_step() in einen TensorFlow-Graphen umzuwandeln.
  3. Führen Sie die Vorwärtspropagation durch sowohl die versteckte als auch die Ausgabeschicht des Netzwerks durch. Verwenden Sie die Sigmoid-Aktivierungsfunktion.
  4. Bestimmen Sie die Gradienten, um zu verstehen, wie jedes Gewicht und jeder Bias den Verlust beeinflusst. Achten Sie darauf, dass die Gradienten in der richtigen Reihenfolge berechnet werden, entsprechend den Namen der Ausgabewerte.
  5. Passen Sie die Gewichte und Biases basierend auf ihren jeweiligen Gradienten an. Integrieren Sie die learning_rate in diesen Anpassungsprozess, um das Ausmaß jeder Aktualisierung zu steuern.

Lösung

Code-Beschreibung
expand arrow

Datenvorbereitung

  • X_data: Dies sind die Eingabedaten für die XOR-Funktion. Es handelt sich um ein NumPy-Array der Form (4, 2), das die vier möglichen Kombinationen der XOR-Eingaben (0,0), (0,1), (1,0) und (1,1) repräsentiert;
  • Y_data: Dies ist die Zielausgabe für jede Eingabekombination in X_data. Es ist ebenfalls ein NumPy-Array, jedoch der Form (4, 1), das die XOR-Ausgabe für jedes Eingabepaar darstellt.

Netzwerkparameter

  • input_size: Die Größe der Eingabeschicht, festgelegt auf 2, entsprechend den zwei Eingabeknoten (für die beiden Eingaben der XOR-Funktion);
  • hidden_size: Die Größe der versteckten Schicht, ebenfalls auf 2 gesetzt. Diese Wahl ist relativ willkürlich, reicht aber aus, um die XOR-Funktion zu erlernen;
  • output_size: Die Größe der Ausgabeschicht, festgelegt auf 1, entsprechend dem einzelnen Ausgabeknoten (dem Ergebnis der XOR-Operation);
  • learning_rate: Die Lernrate für den Optimierungsalgorithmus, steuert, wie stark die Gewichte während des Trainings angepasst werden.

Gewichte und Biases

  • W1 und b1: Die Gewichte (W1) und Biases (b1) für die Verbindungen von der Eingabeschicht zur versteckten Schicht. W1 ist eine TensorFlow-Variable, die mit Zufallswerten initialisiert wird und die Form (input_size, hidden_size), also (2, 2), hat. b1 ist eine TensorFlow-Variable, die mit Nullen initialisiert wird und die Form (hidden_size), also (2), hat;
  • W2 und b2: Die Gewichte (W2) und Biases (b2) für die Verbindungen von der versteckten Schicht zur Ausgabeschicht. W2 wird mit Zufallswerten initialisiert und hat die Form (hidden_size, output_size), also (2, 1). b2 wird mit Nullen initialisiert und hat die Form (output_size), also (1).

Trainingsfunktion

  • train_step(): Dies ist die zentrale Trainingsfunktion. Sie verwendet tf.GradientTape() für die automatische Differenzierung. Im Forward-Pass werden die Aktivierungen der versteckten Schicht (a1) und die Ausgabewerte (Y_pred) berechnet. Der Loss wird als mittlere quadratische Abweichung zwischen Y_pred und Y berechnet. Anschließend werden die Gradienten berechnet und die Gewichte sowie Biases aktualisiert;
  • tf.sigmoid(): Es wird eine Sigmoid-Aktivierungsfunktion verwendet, die den Input in einen Wert zwischen 0 und 1 transformiert. Diese wird sowohl für die versteckte Schicht als auch für die Ausgabeschicht genutzt.

Trainingsschleife

  • Das Netzwerk wird für 2500 Epochen trainiert. In jeder Epoche wird die Funktion train_step() aufgerufen und die Gewichte werden aktualisiert. Der Loss wird alle 500 Epochen ausgegeben, um den Trainingsfortschritt zu überwachen.

Fazit

Da die XOR-Funktion eine relativ einfache Aufgabe ist, sind fortgeschrittene Techniken wie Hyperparameter-Tuning, Datensatzaufteilung oder der Aufbau komplexer Datenpipelines an dieser Stelle nicht erforderlich. Diese Übung ist lediglich ein Schritt auf dem Weg zu komplexeren neuronalen Netzwerken für reale Anwendungen.

Das Beherrschen dieser Grundlagen ist entscheidend, bevor fortgeschrittene Techniken zum Aufbau neuronaler Netzwerke in den kommenden Kursen behandelt werden, in denen die Keras-Bibliothek verwendet und Methoden zur Verbesserung der Modellqualität mit den umfangreichen Funktionen von TensorFlow erforscht werden.

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 3. Kapitel 4
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