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} ===") # Initialisieren der Startwerte max_iterations = 200 # Maximal 200 Iterationen für jedes Bias epoch = 0 network_trained = False start_weights = None final_weights = None bias = 0.0 # Initial Bias ist 0.0 bias_increment = 0.1 # Bias-Inkrement max_bias = 1.3 # Maximaler Bias min_bias = -1.3 # Minimaler 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 (Schwellenwertfunktion mit zwei Schwellenwerten) 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} erfolgreich nach {epoch} Iterationen gelernt.") print(f"Startgewichte: {start_weights}") print(f"Endgewichte: {final_weights}") print(f"Endgültiger Bias: {bias}") continue # Zum nächsten Wahrheitstabelle # Wenn das Netzwerk nach 200 Iterationen nicht gelernt hat, füge den Bias hinzu 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 max_bias und dann bis min_bias bias = 0.0 for bias in np.arange(0.1, max_bias + bias_increment, bias_increment): # Bias von 0.1 bis 1.3 print(f"Versuch mit Bias {bias}:") epoch = 0 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 (Schwellenwertfunktion mit zwei Schwellenwerten) 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: break # Das Netzwerk hat jetzt gelernt # Bias verringern und erneut testen, wenn das Netzwerk nicht erfolgreich war if not network_trained: print("Erhöhe den Bias bis zum maximalen Wert und versuche es dann mit abnehmendem Bias.") for bias in np.arange(max_bias, min_bias - bias_increment, -bias_increment): # Bias von 1.3 bis -1.3 print(f"Versuch mit Bias {bias}:") epoch = 0 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 (Schwellenwertfunktion mit zwei Schwellenwerten) 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: break # Das Netzwerk hat jetzt gelernt # Ausgabe der Ergebnisse nach der Anpassung des 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}")
Standard input is empty
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) === Das Netzwerk hat Wahrheitstabelle 1 erfolgreich nach 1 Iterationen gelernt. Startgewichte: [0.6816314 0.52659151] Endgewichte: [0.6816314 0.52659151] Endgültiger Bias: 0.0 === Wahrheitstabelle 2: Targets = (0, 0, 0, 1) === Das Netzwerk hat Wahrheitstabelle 2 erfolgreich nach 10 Iterationen gelernt. Startgewichte: [0.815406 0.87987759] Endgewichte: [0.48357173 0.40528079] Endgültiger Bias: 0.0 === Wahrheitstabelle 3: Targets = (0, 0, 1, 0) === Das Netzwerk hat Wahrheitstabelle 3 erfolgreich nach 21 Iterationen gelernt. Startgewichte: [0.19847691 0.45170207] Endgewichte: [0.80476068 0.44196812] Endgültiger Bias: 0.0 === Wahrheitstabelle 4: Targets = (0, 0, 1, 1) === Das Netzwerk hat Wahrheitstabelle 4 erfolgreich nach 9 Iterationen gelernt. Startgewichte: [0.92557479 0.99193489] Endgewichte: [0.94263017 0.22674606] Endgültiger Bias: 0.0 === Wahrheitstabelle 5: Targets = (0, 1, 0, 0) === Das Netzwerk hat Wahrheitstabelle 5 erfolgreich nach 2 Iterationen gelernt. Startgewichte: [0.82732331 0.99037784] Endgewichte: [0.75390959 0.93532492] Endgültiger Bias: 0.0 === Wahrheitstabelle 6: Targets = (0, 1, 0, 1) === Das Netzwerk hat Wahrheitstabelle 6 erfolgreich nach 4 Iterationen gelernt. Startgewichte: [0.78439986 0.89577553] Endgewichte: [0.06204915 0.94049761] Endgültiger Bias: 0.0 === Wahrheitstabelle 7: Targets = (0, 1, 1, 0) === Das Netzwerk hat Wahrheitstabelle 7 erfolgreich nach 1 Iterationen gelernt. Startgewichte: [0.88153153 0.99630401] Endgewichte: [0.88153153 0.99630401] Endgültiger Bias: 0.0 === Wahrheitstabelle 8: Targets = (0, 1, 1, 1) === Das Netzwerk hat Wahrheitstabelle 8 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Total Iterationen: 53 Startgewichte: [0.25680673 0.28427442] Endgewichte: [0.37158196 0.30904339] Endgültiger Bias: 0.5 Das Netzwerk hat Wahrheitstabelle 8 erfolgreich gelernt! Startgewichte: [0.25680673 0.28427442] Endgewichte: [0.37158196 0.30904339] Endgültiger Bias: 0.5 === Wahrheitstabelle 9: Targets = (1, 0, 0, 0) === Das Netzwerk hat Wahrheitstabelle 9 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Versuch mit Bias 0.6: Versuch mit Bias 0.7000000000000001: Versuch mit Bias 0.8: Versuch mit Bias 0.9: Total Iterationen: 1 Startgewichte: [0.13011074 0.36105744] Endgewichte: [0.86290517 0.43248062] Endgültiger Bias: 0.9 Das Netzwerk hat Wahrheitstabelle 9 erfolgreich gelernt! Startgewichte: [0.13011074 0.36105744] Endgewichte: [0.86290517 0.43248062] Endgültiger Bias: 0.9 === Wahrheitstabelle 10: Targets = (1, 0, 0, 1) === Das Netzwerk hat Wahrheitstabelle 10 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Versuch mit Bias 0.6: Versuch mit Bias 0.7000000000000001: Versuch mit Bias 0.8: Versuch mit Bias 0.9: Versuch mit Bias 1.0: Versuch mit Bias 1.1: Versuch mit Bias 1.2000000000000002: Versuch mit Bias 1.3000000000000003: Erhöhe den Bias bis zum maximalen Wert und versuche es dann mit abnehmendem Bias. Versuch mit Bias 1.3: Versuch mit Bias 1.2: Versuch mit Bias 1.0999999999999999: Versuch mit Bias 0.9999999999999998: Versuch mit Bias 0.8999999999999997: Versuch mit Bias 0.7999999999999996: Versuch mit Bias 0.6999999999999995: Versuch mit Bias 0.5999999999999994: Versuch mit Bias 0.49999999999999933: Versuch mit Bias 0.39999999999999925: Versuch mit Bias 0.29999999999999916: Versuch mit Bias 0.19999999999999907: Versuch mit Bias 0.09999999999999898: Versuch mit Bias -1.1102230246251565e-15: Versuch mit Bias -0.1000000000000012: Versuch mit Bias -0.2000000000000013: Versuch mit Bias -0.3000000000000014: Versuch mit Bias -0.40000000000000147: Versuch mit Bias -0.5000000000000016: Versuch mit Bias -0.6000000000000016: Versuch mit Bias -0.7000000000000017: Versuch mit Bias -0.8000000000000018: Versuch mit Bias -0.9000000000000019: Versuch mit Bias -1.000000000000002: Versuch mit Bias -1.100000000000002: Versuch mit Bias -1.2000000000000022: Versuch mit Bias -1.3000000000000023: Total Iterationen: 200 Startgewichte: [0.30418947 0.22355268] Endgewichte: None Endgültiger Bias: -1.3000000000000023 === Wahrheitstabelle 11: Targets = (1, 0, 1, 0) === Das Netzwerk hat Wahrheitstabelle 11 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Versuch mit Bias 0.6: Versuch mit Bias 0.7000000000000001: Versuch mit Bias 0.8: Versuch mit Bias 0.9: Total Iterationen: 4 Startgewichte: [0.44818777 0.19624452] Endgewichte: [0.08286214 0.31786431] Endgültiger Bias: 0.9 Das Netzwerk hat Wahrheitstabelle 11 erfolgreich gelernt! Startgewichte: [0.44818777 0.19624452] Endgewichte: [0.08286214 0.31786431] Endgültiger Bias: 0.9 === Wahrheitstabelle 12: Targets = (1, 0, 1, 1) === Das Netzwerk hat Wahrheitstabelle 12 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Versuch mit Bias 0.6: Versuch mit Bias 0.7000000000000001: Versuch mit Bias 0.8: Versuch mit Bias 0.9: Versuch mit Bias 1.0: Versuch mit Bias 1.1: Versuch mit Bias 1.2000000000000002: Versuch mit Bias 1.3000000000000003: Erhöhe den Bias bis zum maximalen Wert und versuche es dann mit abnehmendem Bias. Versuch mit Bias 1.3: Versuch mit Bias 1.2: Versuch mit Bias 1.0999999999999999: Versuch mit Bias 0.9999999999999998: Versuch mit Bias 0.8999999999999997: Versuch mit Bias 0.7999999999999996: Versuch mit Bias 0.6999999999999995: Versuch mit Bias 0.5999999999999994: Versuch mit Bias 0.49999999999999933: Versuch mit Bias 0.39999999999999925: Versuch mit Bias 0.29999999999999916: Versuch mit Bias 0.19999999999999907: Versuch mit Bias 0.09999999999999898: Versuch mit Bias -1.1102230246251565e-15: Versuch mit Bias -0.1000000000000012: Versuch mit Bias -0.2000000000000013: Versuch mit Bias -0.3000000000000014: Versuch mit Bias -0.40000000000000147: Versuch mit Bias -0.5000000000000016: Versuch mit Bias -0.6000000000000016: Versuch mit Bias -0.7000000000000017: Versuch mit Bias -0.8000000000000018: Versuch mit Bias -0.9000000000000019: Versuch mit Bias -1.000000000000002: Versuch mit Bias -1.100000000000002: Versuch mit Bias -1.2000000000000022: Versuch mit Bias -1.3000000000000023: Total Iterationen: 200 Startgewichte: [0.96545522 0.5583395 ] Endgewichte: None Endgültiger Bias: -1.3000000000000023 === Wahrheitstabelle 13: Targets = (1, 1, 0, 0) === Das Netzwerk hat Wahrheitstabelle 13 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Versuch mit Bias 0.6: Versuch mit Bias 0.7000000000000001: Versuch mit Bias 0.8: Versuch mit Bias 0.9: Total Iterationen: 3 Startgewichte: [0.44835199 0.29519782] Endgewichte: [0.81403369 0.23580171] Endgültiger Bias: 0.9 Das Netzwerk hat Wahrheitstabelle 13 erfolgreich gelernt! Startgewichte: [0.44835199 0.29519782] Endgewichte: [0.81403369 0.23580171] Endgültiger Bias: 0.9 === Wahrheitstabelle 14: Targets = (1, 1, 0, 1) === Das Netzwerk hat Wahrheitstabelle 14 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Versuch mit Bias 0.6: Versuch mit Bias 0.7000000000000001: Versuch mit Bias 0.8: Versuch mit Bias 0.9: Versuch mit Bias 1.0: Versuch mit Bias 1.1: Versuch mit Bias 1.2000000000000002: Versuch mit Bias 1.3000000000000003: Erhöhe den Bias bis zum maximalen Wert und versuche es dann mit abnehmendem Bias. Versuch mit Bias 1.3: Versuch mit Bias 1.2: Versuch mit Bias 1.0999999999999999: Versuch mit Bias 0.9999999999999998: Versuch mit Bias 0.8999999999999997: Versuch mit Bias 0.7999999999999996: Versuch mit Bias 0.6999999999999995: Versuch mit Bias 0.5999999999999994: Versuch mit Bias 0.49999999999999933: Versuch mit Bias 0.39999999999999925: Versuch mit Bias 0.29999999999999916: Versuch mit Bias 0.19999999999999907: Versuch mit Bias 0.09999999999999898: Versuch mit Bias -1.1102230246251565e-15: Versuch mit Bias -0.1000000000000012: Versuch mit Bias -0.2000000000000013: Versuch mit Bias -0.3000000000000014: Versuch mit Bias -0.40000000000000147: Versuch mit Bias -0.5000000000000016: Versuch mit Bias -0.6000000000000016: Versuch mit Bias -0.7000000000000017: Versuch mit Bias -0.8000000000000018: Versuch mit Bias -0.9000000000000019: Versuch mit Bias -1.000000000000002: Versuch mit Bias -1.100000000000002: Versuch mit Bias -1.2000000000000022: Versuch mit Bias -1.3000000000000023: Total Iterationen: 200 Startgewichte: [0.87973312 0.49259202] Endgewichte: None Endgültiger Bias: -1.3000000000000023 === Wahrheitstabelle 15: Targets = (1, 1, 1, 0) === Das Netzwerk hat Wahrheitstabelle 15 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Versuch mit Bias 0.6: Versuch mit Bias 0.7000000000000001: Versuch mit Bias 0.8: Versuch mit Bias 0.9: Total Iterationen: 5 Startgewichte: [0.81309769 0.50878497] Endgewichte: [0.04627108 0.26551776] Endgültiger Bias: 0.9 Das Netzwerk hat Wahrheitstabelle 15 erfolgreich gelernt! Startgewichte: [0.81309769 0.50878497] Endgewichte: [0.04627108 0.26551776] Endgültiger Bias: 0.9 === Wahrheitstabelle 16: Targets = (1, 1, 1, 1) === Das Netzwerk hat Wahrheitstabelle 16 nach 200 Iterationen nicht korrekt gelernt. Erhöhe den Bias und versuche es erneut. Versuch mit Bias 0.1: Versuch mit Bias 0.2: Versuch mit Bias 0.30000000000000004: Versuch mit Bias 0.4: Versuch mit Bias 0.5: Versuch mit Bias 0.6: Versuch mit Bias 0.7000000000000001: Versuch mit Bias 0.8: Versuch mit Bias 0.9: Total Iterationen: 8 Startgewichte: [0.69128682 0.3937637 ] Endgewichte: [0.03132715 0.22697578] Endgültiger Bias: 0.9 Das Netzwerk hat Wahrheitstabelle 16 erfolgreich gelernt! Startgewichte: [0.69128682 0.3937637 ] Endgewichte: [0.03132715 0.22697578] Endgültiger Bias: 0.9