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 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 if network_trained: print(f"Das Netzwerk hat Wahrheitstabelle {table_index} korrekt nach {epoch} Iterationen gelernt.") print(f"Startgewichte: {start_weights}") print(f"Endgewichte: {final_weights}") print(f"Bias nach {epoch} Iterationen: {bias}") else: # Wenn das Netzwerk nach 1000 Iterationen nicht gelernt hat, füge den Bias hinzu # und starte einen weiteren Trainingsdurchlauf mit dem neuen Bias. print(f"Das Netzwerk hat Wahrheitstabelle {table_index} nach {epoch} Iterationen nicht korrekt gelernt.") print("Erhöhe den Bias und versuche es erneut.") # Setze den Bias nach 1000 Iterationen neu bias = 0.1 # Setze den Bias zu Beginn auf 0.1 epoch = 0 # Setze die Anzahl der Epochen zurück start_weights = np.random.rand(2) # Zufällige Startgewichte für die erneute Trainingsrunde 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 print(f"Versuch mit neuem Bias ({bias}):") print(f"Total Iterationen: {epoch}") print(f"Startgewichte: {start_weights}") print(f"Endgewichte: {final_weights}") print(f"Endgültiger Bias: {bias}") # Wenn das Netzwerk das Lernen abgeschlossen hat, drucke die Endergebnisse if network_trained: print(f"\nEndgültige Ergebnisse für Wahrheitstabelle {table_index}:") print(f"Startgewichte: {start_weights}") print(f"Endgewichte: {final_weights}") print(f"Endgültiger Bias: {bias}") else: print(f"\nDas Netzwerk konnte Wahrheitstabelle {table_index} nicht lernen.")
Standard input is empty
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) === Das Netzwerk hat Wahrheitstabelle 1 korrekt nach 3 Iterationen gelernt. Startgewichte: [0.84768006 0.67426482] Endgewichte: [0.28809429 0.37241321] Bias nach 3 Iterationen: 0.0 Endgültige Ergebnisse für Wahrheitstabelle 1: Startgewichte: [0.84768006 0.67426482] Endgewichte: [0.28809429 0.37241321] Endgültiger Bias: 0.0 === Wahrheitstabelle 2: Targets = (0, 0, 0, 1) === Das Netzwerk hat Wahrheitstabelle 2 korrekt nach 1 Iterationen gelernt. Startgewichte: [0.25765079 0.75603535] Endgewichte: [0.25765079 0.75603535] Bias nach 1 Iterationen: 0.0 Endgültige Ergebnisse für Wahrheitstabelle 2: Startgewichte: [0.25765079 0.75603535] Endgewichte: [0.25765079 0.75603535] Endgültiger Bias: 0.0 === Wahrheitstabelle 3: Targets = (0, 0, 1, 0) === Das Netzwerk hat Wahrheitstabelle 3 korrekt nach 8 Iterationen gelernt. Startgewichte: [0.73253403 0.66885045] Endgewichte: [0.91842012 0.57960876] Bias nach 8 Iterationen: 0.0 Endgültige Ergebnisse für Wahrheitstabelle 3: Startgewichte: [0.73253403 0.66885045] Endgewichte: [0.91842012 0.57960876] Endgültiger Bias: 0.0 === Wahrheitstabelle 4: Targets = (0, 0, 1, 1) === Das Netzwerk hat Wahrheitstabelle 4 korrekt nach 5 Iterationen gelernt. Startgewichte: [0.31952453 0.29842318] Endgewichte: [0.90745703 0.2171553 ] Bias nach 5 Iterationen: 0.0 Endgültige Ergebnisse für Wahrheitstabelle 4: Startgewichte: [0.31952453 0.29842318] Endgewichte: [0.90745703 0.2171553 ] Endgültiger Bias: 0.0 === Wahrheitstabelle 5: Targets = (0, 1, 0, 0) === Das Netzwerk hat Wahrheitstabelle 5 korrekt nach 13 Iterationen gelernt. Startgewichte: [0.21608235 0.47015535] Endgewichte: [0.70747334 0.88224874] Bias nach 13 Iterationen: 0.0 Endgültige Ergebnisse für Wahrheitstabelle 5: Startgewichte: [0.21608235 0.47015535] Endgewichte: [0.70747334 0.88224874] Endgültiger Bias: 0.0 === Wahrheitstabelle 6: Targets = (0, 1, 0, 1) === Das Netzwerk hat Wahrheitstabelle 6 korrekt nach 2 Iterationen gelernt. Startgewichte: [0.79374247 0.37954923] Endgewichte: [0.08680865 0.93245395] Bias nach 2 Iterationen: 0.0 Endgültige Ergebnisse für Wahrheitstabelle 6: Startgewichte: [0.79374247 0.37954923] Endgewichte: [0.08680865 0.93245395] Endgültiger Bias: 0.0 === Wahrheitstabelle 7: Targets = (0, 1, 1, 0) === Das Netzwerk hat Wahrheitstabelle 7 korrekt nach 43 Iterationen gelernt. Startgewichte: [0.51252556 0.20944935] Endgewichte: [0.87207945 0.91983008] Bias nach 43 Iterationen: 0.0 Endgültige Ergebnisse für Wahrheitstabelle 7: Startgewichte: [0.51252556 0.20944935] Endgewichte: [0.87207945 0.91983008] 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.14517573 0.22533681] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 8 nicht lernen. === 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.00853011 0.76983312] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 9 nicht lernen. === 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.59515888 0.94734868] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 10 nicht lernen. === 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.48031612 0.1395825 ] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 11 nicht lernen. === 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.07631232 0.31883268] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 12 nicht lernen. === 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.2371823 0.59347957] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 13 nicht lernen. === 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.20948338 0.46919116] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 14 nicht lernen. === 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.73880092 0.89328941] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 15 nicht lernen. === 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 neuem Bias (0.1): Total Iterationen: 1000 Startgewichte: [0.57385333 0.91648684] Endgewichte: None Endgültiger Bias: 0.1 Das Netzwerk konnte Wahrheitstabelle 16 nicht lernen.