Neuronales Netz in Python

Neuronale Netze sind ein mächtiges Werkzeug in der künstlichen Intelligenz. Sie können verwendet werden, um Muster in Daten zu finden und Vorhersagen zu treffen.

Dieser Python-Code zeigt ein einfaches neuronales Netzwerk, das verwendet wird, um eine logische XOR-Funktion zu erlernen.

Der Code liegt auch als Gist bereit.

import numpy as np

# Eingabedaten
X = np.array([[0, 0, 1],
[0, 1, 1],
[1, 0, 1],
[1, 1, 1]])

# Erwartete Ausgabedaten
y = np.array([[0],
[1],
[1],
[0]])

# Anzahl der Eingabe- und Ausgabeneuronen
input_neurons = X.shape[1]
output_neurons = y.shape[1]

# Anzahl der Neuronen in der versteckten Schicht
hidden_neurons = 3

# Definition der Aktivierungsfunktion (Sigmoid)
def sigmoid(x):
return 1 / (1 + np.exp(-x))

# Definition der Ableitung der Aktivierungsfunktion (Sigmoid)
def sigmoid_derivative(x):
return x * (1 - x)

# Initialisierung der Gewichtungsmatrizen
# Gewichte zwischen Eingabe- und versteckter Schicht
weights_input_hidden = np.random.rand(input_neurons, hidden_neurons)
# Gewichte zwischen versteckter Schicht und Ausgabe
weights_hidden_output = np.random.rand(hidden_neurons, output_neurons)

# Anzahl der Epochen für das Training
epochs = 5000

# Trainingschleife
for epoch in range(epochs):
# Vorwärtspropagation (Forward Propagation)
hidden_layer_input = np.dot(X, weights_input_hidden)
hidden_layer_output = sigmoid(hidden_layer_input)
output = sigmoid(np.dot(hidden_layer_output, weights_hidden_output))

# Berechnung des Fehlers (Error)
error = y - output

# Rückwärtspropagation (Backpropagation) und Gewichtsanpassung
d_weights_hidden_output = np.dot(hidden_layer_output.T, error * sigmoid_derivative(output))
d_weights_input_hidden = np.dot(X.T, np.dot(error * sigmoid_derivative(output), weights_hidden_output.T) * sigmoid_derivative(hidden_layer_output))

weights_hidden_output += d_weights_hidden_output
weights_input_hidden += d_weights_input_hidden

# Ausgabe der finalen Vorhersage
print(output)

Das Netzwerk besteht aus drei Schichten: einer Eingabeschicht, einer versteckten Schicht und einer Ausgabeschicht. Die Eingabeschicht erhält die Eingabedaten als Input. In diesem Beispiel sind die Eingabedaten eine Matrix, die vier Zeilen und drei Spalten hat. Jede Zeile entspricht einem Beispiel, und jede Spalte entspricht einem Merkmal. Die Ausgabeschicht gibt die Vorhersage des Netzes zurück.

Die versteckte Schicht ist das Herzstück des Netzes. Sie besteht aus drei Neuronen, die jeweils mit allen Eingabeneuronen verbunden sind. Die Verbindungen haben Gewichte, die das Gewicht jedes Eingabemerkmals auf das Neuron in der versteckten Schicht bestimmen.

Das Netzwerk verwendet die Sigmoid-Aktivierungsfunktion, um die Ausgabe der Neuronen zu berechnen. Die Ableitung dieser Funktion wird auch in der Codezeile definiert, um später für die Rückwärtspropagation zu verwenden.

Das Netzwerk wird durch das Anpassen der Gewichte trainiert. Der Code enthält eine Trainingschleife, die 5000 mal durchlaufen wird. In jedem Durchlauf werden die Eingabedaten durch das Netzwerk geleitet, und der Fehler zwischen der erwarteten Ausgabe und der tatsächlichen Ausgabe wird berechnet. Die Rückwärtspropagation wird durchgeführt, um die Gewichte anzupassen und den Fehler zu minimieren.

Am Ende des Trainings gibt der Code die Vorhersage des Netzes für die Eingabedaten aus.

Das Beispiel ist zwar sehr einfach, aber theoretisch können als Eingabedaten beliebige Werte verwendet werden. Photos bestehen aus Pixeln und diese können auch als Werte verstanden werden. Ebenso können z.B. unterschiedliche Messwerte genutzt werden um eine Klassifizierung vorzunehmen.

In der Zahl der Neuronen, Anzahl der Trainingsläufe, der Aktivierungsfunktion und den Gewichten stecken aber eine Menge Details und Optimierungsmöglichkeiten.



Als erster einen Kommentar schreiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert