import numpy as np from itertools import product # To generate all binary combinations # Initialisierung der Schwellenwerte lower_threshold = 0.8 upper_threshold = 1.2 # Lernrate learning_rate = 0.1 # Trainingsdaten (Inputs für das XOR-Problem und andere) inputs = [[0, 0], [0, 1], [1, 0], [1, 1]] # Alle möglichen Zieltabellen (16 Kombinationen) all_possible_targets = list(product([0, 1], repeat=4)) # Trainingsloop für jede mögliche Zieltabelle for table_index, targets in enumerate(all_possible_targets, start=1): print(f"\n=== Wahrheitstabelle {table_index}: Targets = {targets} ===") # Trainingsloop mit max. 1000 Iterationen max_iterations = 1000 epoch = 0 network_trained = False start_weights = None final_weights = None bias = 0.0 # Initial bias value is set to 0.0 bias_increment = 0.1 # Increment to change bias max_bias = 1.3 # Maximum bias min_bias = -1.3 # Minimum bias bias_direction = 1 # Start by increasing bias # Erste Trainingsrunde ohne Bias-Erhöhung while epoch < max_iterations: epoch += 1 all_correct = True # Flag, um zu überprüfen, ob alle Ausgaben korrekt sind current_weights = np.random.rand(2) # Zufällige Startgewichte if epoch == 1: # Die erste Iteration nach Initialisierung start_weights = current_weights # Speichere die Startgewichte for input_vector, target in zip(inputs, targets): # Berechnung der gewichteten Summe inkl. Bias weighted_sum = np.dot(input_vector, current_weights) + bias # Aktivierungsfunktion (einfache Schwellenwertfunktion) output = 1 if lower_threshold < weighted_sum < upper_threshold else 0 # Fehlerberechnung error = target - output # Wenn ein Fehler vorliegt, dann weise die Gewichte an if error != 0: all_correct = False current_weights += learning_rate * error * np.array(input_vector) # Überprüfe, ob alle Ausgaben korrekt sind if all_correct: network_trained = True final_weights = current_weights # Speichere die finalen Gewichte break # Stoppe, wenn alle Ausgaben korrekt sind # Wenn das Netzwerk nach 1000 Iterationen nicht gelernt hat, füge den Bias hinzu if not network_trained: print(f"Das Netzwerk hat Wahrheitstabelle {table_index} nach {epoch} Iterationen nicht korrekt gelernt.") print("Erhöhe den Bias und versuche es erneut.") # Bias erhöhen in Schritten bis 1.3 und dann bis -1.3 if bias_direction == 1: # Bias erhöhen bis 1.3 if bias < max_bias: bias += bias_increment else: bias_direction = -1 # Wechsel auf Verringerung des Bias bias -= bias_increment # Beginne mit der Verringerung elif bias_direction == -1: # Bias verringern von 1.3 bis -1.3 if bias > min_bias: bias -= bias_increment else: bias_direction = 1 # Wechsel auf Erhöhung des Bias bias += bias_increment # Beginne mit der Erhöhung # Neue Trainingsrunde mit angepasstem Bias starten epoch = 0 # Setze die Anzahl der Epochen zurück start_weights = np.random.rand(2) # Zufällige Startgewichte für die erneute Trainingsrunde network_trained = False # Netzwerk muss erneut trainiert werden while epoch < max_iterations: epoch += 1 all_correct = True current_weights = np.random.rand(2) # Zufällige Startgewichte for input_vector, target in zip(inputs, targets): # Berechnung der gewichteten Summe inkl. Bias weighted_sum = np.dot(input_vector, current_weights) + bias # Aktivierungsfunktion (einfache Schwellenwertfunktion) output = 1 if lower_threshold < weighted_sum < upper_threshold else 0 # Fehlerberechnung error = target - output # Wenn ein Fehler vorliegt, dann weise die Gewichte an if error != 0: all_correct = False current_weights += learning_rate * error * np.array(input_vector) # Überprüfe, ob alle Ausgaben korrekt sind if all_correct: network_trained = True final_weights = current_weights # Speichere die finalen Gewichte break # Stoppe, wenn alle Ausgaben korrekt sind # Ausgabe der Ergebnisse nach der zweiten Trainingsrunde mit erhöhtem Bias print(f"Versuch mit Bias ({bias}):") print(f"Total Iterationen: {epoch}") print(f"Startgewichte: {start_weights}") print(f"Endgewichte: {final_weights}") print(f"Endgültiger Bias: {bias}") # Prüfen, ob das Netzwerk die Tabelle erfolgreich gelernt hat if network_trained: print(f"\nDas Netzwerk hat Wahrheitstabelle {table_index} erfolgreich gelernt!") print(f"Startgewichte: {start_weights}") print(f"Endgewichte: {final_weights}") print(f"Endgültiger Bias: {bias}") else: print(f"\nDas Netzwerk hat Wahrheitstabelle {table_index} nach Anpassung des Bias immer noch nicht korrekt gelernt.")
Standard input is empty
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) === Das Netzwerk hat Wahrheitstabelle 1 erfolgreich gelernt! Startgewichte: [0.56559241 0.06118599] Endgewichte: [0.76004724 0.55209149] Endgültiger Bias: 0.0 === Wahrheitstabelle 2: Targets = (0, 0, 0, 1) === Das Netzwerk hat Wahrheitstabelle 2 erfolgreich gelernt! Startgewichte: [0.9874637 0.96765139] Endgewichte: [0.4370784 0.59634726] Endgültiger Bias: 0.0 === Wahrheitstabelle 3: Targets = (0, 0, 1, 0) === Das Netzwerk hat Wahrheitstabelle 3 erfolgreich gelernt! Startgewichte: [0.68439298 0.06576694] Endgewichte: [0.81794364 0.55361796] Endgültiger Bias: 0.0 === Wahrheitstabelle 4: Targets = (0, 0, 1, 1) === Das Netzwerk hat Wahrheitstabelle 4 erfolgreich gelernt! Startgewichte: [0.2273946 0.18996731] Endgewichte: [0.99931742 0.01928233] Endgültiger Bias: 0.0 === Wahrheitstabelle 5: Targets = (0, 1, 0, 0) === Das Netzwerk hat Wahrheitstabelle 5 erfolgreich gelernt! Startgewichte: [0.82898689 0.87136358] Endgewichte: [0.72856448 0.82151338] Endgültiger Bias: 0.0 === Wahrheitstabelle 6: Targets = (0, 1, 0, 1) === Das Netzwerk hat Wahrheitstabelle 6 erfolgreich gelernt! Startgewichte: [0.61425568 1.01849053] Endgewichte: [0.17721292 0.99483894] Endgültiger Bias: 0.0 === Wahrheitstabelle 7: Targets = (0, 1, 1, 0) === Das Netzwerk hat Wahrheitstabelle 7 erfolgreich gelernt! Startgewichte: [0.49036048 0.85089501] Endgewichte: [0.91308815 0.8337495 ] Endgültiger Bias: 0.0 === Wahrheitstabelle 8: Targets = (0, 1, 1, 1) === Das Netzwerk hat Wahrheitstabelle 8 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.33959449 0.20978863] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 8 nach Anpassung des Bias immer noch nicht korrekt gelernt. === Wahrheitstabelle 9: Targets = (1, 0, 0, 0) === Das Netzwerk hat Wahrheitstabelle 9 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.63912593 0.16711602] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 9 nach Anpassung des Bias immer noch nicht korrekt gelernt. === Wahrheitstabelle 10: Targets = (1, 0, 0, 1) === Das Netzwerk hat Wahrheitstabelle 10 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.83318809 0.16302887] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 10 nach Anpassung des Bias immer noch nicht korrekt gelernt. === Wahrheitstabelle 11: Targets = (1, 0, 1, 0) === Das Netzwerk hat Wahrheitstabelle 11 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.92267583 0.50988735] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 11 nach Anpassung des Bias immer noch nicht korrekt gelernt. === Wahrheitstabelle 12: Targets = (1, 0, 1, 1) === Das Netzwerk hat Wahrheitstabelle 12 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.70000309 0.36085719] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 12 nach Anpassung des Bias immer noch nicht korrekt gelernt. === Wahrheitstabelle 13: Targets = (1, 1, 0, 0) === Das Netzwerk hat Wahrheitstabelle 13 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.0420691 0.40539302] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 13 nach Anpassung des Bias immer noch nicht korrekt gelernt. === Wahrheitstabelle 14: Targets = (1, 1, 0, 1) === Das Netzwerk hat Wahrheitstabelle 14 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.75345675 0.52012236] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 14 nach Anpassung des Bias immer noch nicht korrekt gelernt. === Wahrheitstabelle 15: Targets = (1, 1, 1, 0) === Das Netzwerk hat Wahrheitstabelle 15 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.70669632 0.17137626] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 15 nach Anpassung des Bias immer noch nicht korrekt gelernt. === Wahrheitstabelle 16: Targets = (1, 1, 1, 1) === Das Netzwerk hat Wahrheitstabelle 16 nach 1000 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.53750958 0.12789688] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk hat Wahrheitstabelle 16 nach Anpassung des Bias immer noch nicht korrekt gelernt.