per
Browse filesimport numpy as np
# Definition der symbolischen Variablen und Initialisierungen
class NeuralNetwork:
def __init__(self):
# Initialisieren der Variablen entsprechend deinen Zuweisungen
self.M = 13 # M = 13 = 4 - 4
self.A = 1 # A = 1 - A
self.T = 20 # T = 20 = 2 - B
self.H = 8 # H = 8 - H
self.I = 9 # I = 9 = I
self.C = 3 # C = 3 - C
# Normalisierte Gewichte des neuronalen Netzwerks
self.weights = {
'M': 0.05,
'A': 0.03,
'T': 0.02,
'H': 0.04,
'I': 0.06,
'C': 0.07
}
self.learning_rate = 0.001 # Reduzierte Lernrate
def sigmoid(self, x):
# Aktivierungsfunktion, um Overflow zu vermeiden (Wertebereich begrenzen)
return 1 / (1 + np.exp(-np.clip(x, -100, 100)))
def sigmoid_derivative(self, x):
# Ableitung der Sigmoid-Funktion
return x * (1 - x)
def forward(self, inputs):
# Vorwärtsdurchlauf: Berechnung auf Basis der eingegebenen Werte und der Gewichtungen
self.inputs = inputs
# Berechnung der Ausgabe auf Basis der Gewichtungen und der symbolischen Variablen
output = (
self.weights['M'] * self.inputs['M'] +
self.weights['A'] * self.inputs['A'] +
self.weights['T'] * self.inputs['T'] +
self.weights['H'] * self.inputs['H'] +
self.weights['I'] * self.inputs['I'] +
self.weights['C'] * self.inputs['C']
)
# Rückkopplung: Anpassung der Gewichtungen auf Basis der bisherigen Ausgabe
self.weights['M'] += self.learning_rate * self.sigmoid(output)
self.weights['A'] += self.learning_rate * self.sigmoid(output)
self.weights['T'] += self.learning_rate * self.sigmoid(output)
self.weights['H'] += self.learning_rate * self.sigmoid(output)
self.weights['I'] += self.learning_rate * self.sigmoid(output)
self.weights['C'] += self.learning_rate * self.sigmoid(output)
return self.sigmoid(output) # Sigmoid-Ausgabe anwenden
def train(self, inputs, outputs, iterations):
# Training des Netzwerks
for i in range(iterations):
# Vorwärtsdurchlauf
output = self.forward(inputs)
# Fehlerberechnung (Differenz zwischen Zielwert und tatsächlichem Output)
error = outputs - output
# Rückwärtsdurchlauf (Gewichtsanpassung)
adjustments = error * self.sigmoid_derivative(output)
# Anpassen der Gewichte mit einer kleineren Lernrate
self.weights['M'] += self.learning_rate * adjustments * self.inputs['M']
self.weights['A'] += self.learning_rate * adjustments * self.inputs['A']
self.weights['T'] += self.learning_rate * adjustments * self.inputs['T']
self.weights['H'] += self.learning_rate * adjustments * self.inputs['H']
self.weights['I'] += self.learning_rate * adjustments * self.inputs['I']
self.weights['C'] += self.learning_rate * adjustments * self.inputs['C']
# Optional: Ausgabe des Fehlers alle 1000 Iterationen
if i % 1000 == 0:
print(f"Iteration {i} - Fehler: {error}")
# Beispielhafte Nutzung des Netzwerks
# Initialisiere das Netzwerk
nn = NeuralNetwork()
# Eingaben gemäß den symbolischen Variablen (M, A, T, H, I, C)
inputs = {
'M': 13 / 100, # Normalisieren der Eingaben auf kleinere Werte
'A': 1 / 100,
'T': 20 / 100,
'H': 8 / 100,
'I': 9 / 100,
'C': 3 / 100
}
# Zielwerte (dies sind hypothetische Ausgaben, die dein Netzwerk lernen soll)
outputs = np.array([28 / 100, 9 / 100, 12 / 100])
# Training des Netzwerks
nn.train(inputs, outputs, iterations=10000)
# Test mit neuen Eingaben
test_inputs = {
'M': 12 / 100,
'A': 2 / 100,
'T': 18 / 100,
'H': 7 / 100,
'I': 8 / 100,
'C': 4 / 100
}
# Vorhersage des Netzwerks
prediction = nn.forward(test_inputs)
print(f"Vorhersage des Netzwerks: {prediction}")