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. # Trainingsloop mit max. 1000 Iterationen
  22. max_iterations = 1000
  23. epoch = 0
  24. network_trained = False
  25. start_weights = None
  26. final_weights = None
  27. bias = 0.0 # Initial bias value is set to 0.0
  28. bias_increment = 0.1 # Increment to change bias
  29. max_bias = 1.3 # Maximum bias
  30. min_bias = -1.3 # Minimum bias
  31.  
  32. # Erste Trainingsrunde ohne Bias-Erhöhung
  33. while epoch < max_iterations:
  34. epoch += 1
  35. all_correct = True # Flag, um zu überprüfen, ob alle Ausgaben korrekt sind
  36. current_weights = np.random.rand(2) # Zufällige Startgewichte
  37.  
  38. if epoch == 1: # Die erste Iteration nach Initialisierung
  39. start_weights = current_weights # Speichere die Startgewichte
  40.  
  41. for input_vector, target in zip(inputs, targets):
  42. # Berechnung der gewichteten Summe inkl. Bias
  43. weighted_sum = np.dot(input_vector, current_weights) + bias
  44.  
  45. # Aktivierungsfunktion (einfache Schwellenwertfunktion)
  46. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  47.  
  48. # Fehlerberechnung
  49. error = target - output
  50.  
  51. # Wenn ein Fehler vorliegt, dann weise die Gewichte an
  52. if error != 0:
  53. all_correct = False
  54. current_weights += learning_rate * error * np.array(input_vector)
  55.  
  56. # Überprüfe, ob alle Ausgaben korrekt sind
  57. if all_correct:
  58. network_trained = True
  59. final_weights = current_weights # Speichere die finalen Gewichte
  60. break # Stoppe, wenn alle Ausgaben korrekt sind
  61.  
  62. # Wenn das Netzwerk nach 1000 Iterationen nicht gelernt hat, füge den Bias hinzu
  63. if not network_trained:
  64. print(f"Das Netzwerk hat Wahrheitstabelle {table_index} nach {epoch} Iterationen nicht korrekt gelernt.")
  65. print("Erhöhe den Bias und versuche es erneut.")
  66.  
  67. # Bias erhöhen in Schritten bis 1.3 und dann bis -1.3
  68. if bias < max_bias:
  69. bias += bias_increment # Erhöhe den Bias
  70. elif bias >= max_bias and bias > min_bias:
  71. bias -= 0.1 # Wenn der Bias 1.3 erreicht hat, beginne ihn zu verringern
  72.  
  73. # Neue Trainingsrunde mit angepasstem Bias starten
  74. epoch = 0 # Setze die Anzahl der Epochen zurück
  75. start_weights = np.random.rand(2) # Zufällige Startgewichte für die erneute Trainingsrunde
  76. network_trained = False # Netzwerk muss erneut trainiert werden
  77.  
  78. while epoch < max_iterations:
  79. epoch += 1
  80. all_correct = True
  81. current_weights = np.random.rand(2) # Zufällige Startgewichte
  82.  
  83. for input_vector, target in zip(inputs, targets):
  84. # Berechnung der gewichteten Summe inkl. Bias
  85. weighted_sum = np.dot(input_vector, current_weights) + bias
  86.  
  87. # Aktivierungsfunktion (einfache Schwellenwertfunktion)
  88. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  89.  
  90. # Fehlerberechnung
  91. error = target - output
  92.  
  93. # Wenn ein Fehler vorliegt, dann weise die Gewichte an
  94. if error != 0:
  95. all_correct = False
  96. current_weights += learning_rate * error * np.array(input_vector)
  97.  
  98. # Überprüfe, ob alle Ausgaben korrekt sind
  99. if all_correct:
  100. network_trained = True
  101. final_weights = current_weights # Speichere die finalen Gewichte
  102. break # Stoppe, wenn alle Ausgaben korrekt sind
  103.  
  104. # Ausgabe der Ergebnisse nach der zweiten Trainingsrunde mit erhöhtem Bias
  105. print(f"Versuch mit Bias ({bias}):")
  106. print(f"Total Iterationen: {epoch}")
  107. print(f"Startgewichte: {start_weights}")
  108. print(f"Endgewichte: {final_weights}")
  109. print(f"Endgültiger Bias: {bias}")
  110.  
  111. # Prüfen, ob das Netzwerk die Tabelle erfolgreich gelernt hat
  112. if network_trained:
  113. print(f"\nDas Netzwerk hat Wahrheitstabelle {table_index} erfolgreich gelernt!")
  114. print(f"Startgewichte: {start_weights}")
  115. print(f"Endgewichte: {final_weights}")
  116. print(f"Endgültiger Bias: {bias}")
  117. else:
  118. print(f"\nDas Netzwerk hat Wahrheitstabelle {table_index} nach Anpassung des Bias immer noch nicht korrekt gelernt.")
  119.  
Success #stdin #stdout 1.34s 28964KB
stdin
Standard input is empty
stdout
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) ===

Das Netzwerk hat Wahrheitstabelle 1 erfolgreich gelernt!
Startgewichte: [0.71783843 0.70447152]
Endgewichte: [0.33909979 0.13056882]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 2: Targets = (0, 0, 0, 1) ===

Das Netzwerk hat Wahrheitstabelle 2 erfolgreich gelernt!
Startgewichte: [0.25946211 0.36791448]
Endgewichte: [0.64891458 0.51242678]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 3: Targets = (0, 0, 1, 0) ===

Das Netzwerk hat Wahrheitstabelle 3 erfolgreich gelernt!
Startgewichte: [0.99696668 0.58242886]
Endgewichte: [0.99696668 0.58242886]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 4: Targets = (0, 0, 1, 1) ===

Das Netzwerk hat Wahrheitstabelle 4 erfolgreich gelernt!
Startgewichte: [0.5701347  0.32609788]
Endgewichte: [0.93396276 0.0473006 ]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 5: Targets = (0, 1, 0, 0) ===

Das Netzwerk hat Wahrheitstabelle 5 erfolgreich gelernt!
Startgewichte: [0.67150814 0.22853887]
Endgewichte: [0.79953812 0.96336574]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 6: Targets = (0, 1, 0, 1) ===

Das Netzwerk hat Wahrheitstabelle 6 erfolgreich gelernt!
Startgewichte: [0.81979213 0.13612202]
Endgewichte: [0.10273208 0.99971443]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 7: Targets = (0, 1, 1, 0) ===

Das Netzwerk hat Wahrheitstabelle 7 erfolgreich gelernt!
Startgewichte: [0.6703864  0.61959282]
Endgewichte: [0.91714257 0.97604221]
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.77128471 0.08522099]
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.74946682 0.03018468]
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.89647684 0.42857854]
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.15142248 0.36777714]
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.53372606 0.89224696]
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.09670788 0.6940815 ]
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.51333329 0.99397062]
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.89232704 0.89449597]
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.0992127  0.74442041]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk hat Wahrheitstabelle 16 nach Anpassung des Bias immer noch nicht korrekt gelernt.