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 = 500 # Maximal 500 Iterationen für jedes Bias epoch = 0 network_trained = False start_weights = None final_weights = None bias_list = [0.0, 0.5, 0.9] # Bias values to try reset_count = 0 # Counter to track the number of weight resets # Iterate over bias values: first try 0.0, then 0.5, then 0.9 for bias in bias_list: print(f"Versuch mit Bias {bias}:") epoch = 0 network_trained = False # Netzwerk muss erneut trainiert werden start_weights = np.random.uniform(-2, 2, 2) # Zufällige Startgewichte für die Trainingsrunde while epoch < max_iterations: epoch += 1 all_correct = True current_weights = np.random.uniform(-2, 2, 2) # Zufällige Startgewichte im Bereich [-2, 2] 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}") break # Wenn es mit diesem Bias erfolgreich war, gehe zum nächsten Wahrheitstabelle else: print(f"Das Netzwerk konnte mit Bias {bias} die Wahrheitstabelle {table_index} nicht lernen.") print("Versuche es mit dem nächsten Bias.") if not network_trained: print(f"Das Netzwerk hat Wahrheitstabelle {table_index} auch nach dem Testen aller Bias-Werte nicht korrekt gelernt.") print("Kein Erfolg mit diesem Ziel.")
Standard input is empty
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) === Versuch mit Bias 0.0: Das Netzwerk hat Wahrheitstabelle 1 erfolgreich nach 1 Iterationen gelernt. Startgewichte: [0.42044299 0.38010768] Endgewichte: [-0.77746878 0.38505809] Endgültiger Bias: 0.0 === Wahrheitstabelle 2: Targets = (0, 0, 0, 1) === Versuch mit Bias 0.0: Das Netzwerk hat Wahrheitstabelle 2 erfolgreich nach 11 Iterationen gelernt. Startgewichte: [ 0.86458046 -1.88618476] Endgewichte: [0.51747966 0.47396066] Endgültiger Bias: 0.0 === Wahrheitstabelle 3: Targets = (0, 0, 1, 0) === Versuch mit Bias 0.0: Das Netzwerk hat Wahrheitstabelle 3 erfolgreich nach 59 Iterationen gelernt. Startgewichte: [1.82061709 0.12518626] Endgewichte: [1.19075145 1.4732442 ] Endgültiger Bias: 0.0 === Wahrheitstabelle 4: Targets = (0, 0, 1, 1) === Versuch mit Bias 0.0: Das Netzwerk hat Wahrheitstabelle 4 erfolgreich nach 18 Iterationen gelernt. Startgewichte: [-1.17773193 0.28180011] Endgewichte: [ 1.0540869 -0.0789788] Endgültiger Bias: 0.0 === Wahrheitstabelle 5: Targets = (0, 1, 0, 0) === Versuch mit Bias 0.0: Das Netzwerk hat Wahrheitstabelle 5 erfolgreich nach 5 Iterationen gelernt. Startgewichte: [-1.36392628 -0.8688345 ] Endgewichte: [-0.39014176 1.14123835] Endgültiger Bias: 0.0 === Wahrheitstabelle 6: Targets = (0, 1, 0, 1) === Versuch mit Bias 0.0: Das Netzwerk hat Wahrheitstabelle 6 erfolgreich nach 160 Iterationen gelernt. Startgewichte: [-0.82288613 0.03621044] Endgewichte: [0.06369975 1.0073885 ] Endgültiger Bias: 0.0 === Wahrheitstabelle 7: Targets = (0, 1, 1, 0) === Versuch mit Bias 0.0: Das Netzwerk hat Wahrheitstabelle 7 erfolgreich nach 194 Iterationen gelernt. Startgewichte: [1.89250748 0.71810334] Endgewichte: [0.99302504 0.98032329] Endgültiger Bias: 0.0 === Wahrheitstabelle 8: Targets = (0, 1, 1, 1) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 8 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 8 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk konnte mit Bias 0.9 die Wahrheitstabelle 8 nicht lernen. Versuche es mit dem nächsten Bias. Das Netzwerk hat Wahrheitstabelle 8 auch nach dem Testen aller Bias-Werte nicht korrekt gelernt. Kein Erfolg mit diesem Ziel. === Wahrheitstabelle 9: Targets = (1, 0, 0, 0) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 9 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 9 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk hat Wahrheitstabelle 9 erfolgreich nach 2 Iterationen gelernt. Startgewichte: [-0.61621106 -0.79204322] Endgewichte: [ 0.83964048 -0.96363075] Endgültiger Bias: 0.9 === Wahrheitstabelle 10: Targets = (1, 0, 0, 1) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 10 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 10 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk hat Wahrheitstabelle 10 erfolgreich nach 3 Iterationen gelernt. Startgewichte: [-0.77047519 0.5640546 ] Endgewichte: [ 1.47751424 -1.26570137] Endgültiger Bias: 0.9 === Wahrheitstabelle 11: Targets = (1, 0, 1, 0) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 11 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 11 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk hat Wahrheitstabelle 11 erfolgreich nach 21 Iterationen gelernt. Startgewichte: [ 1.44016412 -1.24079835] Endgewichte: [0.24879038 0.7316581 ] Endgültiger Bias: 0.9 === Wahrheitstabelle 12: Targets = (1, 0, 1, 1) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 12 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 12 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk konnte mit Bias 0.9 die Wahrheitstabelle 12 nicht lernen. Versuche es mit dem nächsten Bias. Das Netzwerk hat Wahrheitstabelle 12 auch nach dem Testen aller Bias-Werte nicht korrekt gelernt. Kein Erfolg mit diesem Ziel. === Wahrheitstabelle 13: Targets = (1, 1, 0, 0) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 13 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 13 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk hat Wahrheitstabelle 13 erfolgreich nach 9 Iterationen gelernt. Startgewichte: [0.2235232 0.21252052] Endgewichte: [-1.67820109 0.25503231] Endgültiger Bias: 0.9 === Wahrheitstabelle 14: Targets = (1, 1, 0, 1) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 14 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 14 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk hat Wahrheitstabelle 14 erfolgreich nach 402 Iterationen gelernt. Startgewichte: [-1.20423125 1.01567499] Endgewichte: [-0.10964418 0.18633731] Endgültiger Bias: 0.9 === Wahrheitstabelle 15: Targets = (1, 1, 1, 0) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 15 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 15 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk hat Wahrheitstabelle 15 erfolgreich nach 203 Iterationen gelernt. Startgewichte: [-0.75834234 0.478016 ] Endgewichte: [0.20241754 0.15631032] Endgültiger Bias: 0.9 === Wahrheitstabelle 16: Targets = (1, 1, 1, 1) === Versuch mit Bias 0.0: Das Netzwerk konnte mit Bias 0.0 die Wahrheitstabelle 16 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.5: Das Netzwerk konnte mit Bias 0.5 die Wahrheitstabelle 16 nicht lernen. Versuche es mit dem nächsten Bias. Versuch mit Bias 0.9: Das Netzwerk hat Wahrheitstabelle 16 erfolgreich nach 42 Iterationen gelernt. Startgewichte: [-0.21685445 -1.99376974] Endgewichte: [0.23184441 0.02017949] Endgültiger Bias: 0.9