fork download
  1. import numpy as np
  2. from itertools import product # To generate all binary combinations
  3.  
  4. # Initialisierung der Schwellenwerte
  5. lower_threshold = 0.8
  6. upper_threshold = 1.2
  7.  
  8. # Lernrate
  9. learning_rate = 0.1
  10.  
  11. # Trainingsdaten (Inputs für das XOR-Problem und andere)
  12. inputs = [[0, 0], [0, 1], [1, 0], [1, 1]]
  13.  
  14. # Alle möglichen Zieltabellen (16 Kombinationen)
  15. all_possible_targets = list(product([0, 1], repeat=4))
  16.  
  17. # Trainingsloop für jede mögliche Zieltabelle
  18. for table_index, targets in enumerate(all_possible_targets, start=1):
  19. print(f"\n=== Wahrheitstabelle {table_index}: Targets = {targets} ===")
  20.  
  21. # Initialisieren der Startwerte
  22. max_iterations = 500 # Maximal 500 Iterationen für jedes Bias
  23. epoch = 0
  24. network_trained = False
  25. start_weights = None
  26. final_weights = None
  27. bias_list = [0.0, 0.5, 0.9] # Bias values to try
  28. reset_count = 0 # Counter to track the number of weight resets
  29.  
  30. # Iterate over bias values: first try 0.0, then 0.5, then 0.9
  31. for bias in bias_list:
  32. print(f"Versuch mit Bias {bias}:")
  33.  
  34. epoch = 0
  35. network_trained = False # Netzwerk muss erneut trainiert werden
  36. start_weights = np.random.uniform(-2, 2, 2) # Zufällige Startgewichte für die Trainingsrunde
  37.  
  38. while epoch < max_iterations:
  39. epoch += 1
  40. all_correct = True
  41. current_weights = np.random.uniform(-2, 2, 2) # Zufällige Startgewichte im Bereich [-2, 2]
  42.  
  43. for input_vector, target in zip(inputs, targets):
  44. # Berechnung der gewichteten Summe inkl. Bias
  45. weighted_sum = np.dot(input_vector, current_weights) + bias
  46.  
  47. # Aktivierungsfunktion (Schwellenwertfunktion mit zwei Schwellenwerten)
  48. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  49.  
  50. # Fehlerberechnung
  51. error = target - output
  52.  
  53. # Wenn ein Fehler vorliegt, dann weise die Gewichte an
  54. if error != 0:
  55. all_correct = False
  56. current_weights += learning_rate * error * np.array(input_vector)
  57.  
  58. # Überprüfe, ob alle Ausgaben korrekt sind
  59. if all_correct:
  60. network_trained = True
  61. final_weights = current_weights # Speichere die finalen Gewichte
  62. break # Stoppe, wenn alle Ausgaben korrekt sind
  63.  
  64. if network_trained:
  65. print(f"Das Netzwerk hat Wahrheitstabelle {table_index} erfolgreich nach {epoch} Iterationen gelernt.")
  66. print(f"Startgewichte: {start_weights}")
  67. print(f"Endgewichte: {final_weights}")
  68. print(f"Endgültiger Bias: {bias}")
  69. break # Wenn es mit diesem Bias erfolgreich war, gehe zum nächsten Wahrheitstabelle
  70. else:
  71. print(f"Das Netzwerk konnte mit Bias {bias} die Wahrheitstabelle {table_index} nicht lernen.")
  72. print("Versuche es mit dem nächsten Bias.")
  73.  
  74. if not network_trained:
  75. print(f"Das Netzwerk hat Wahrheitstabelle {table_index} auch nach dem Testen aller Bias-Werte nicht korrekt gelernt.")
  76. print("Kein Erfolg mit diesem Ziel.")
  77.  
Success #stdin #stdout 0.62s 28820KB
stdin
Standard input is empty
stdout
=== 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