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

Das Netzwerk hat Wahrheitstabelle 1 erfolgreich gelernt!
Startgewichte: [0.77514297 0.12359834]
Endgewichte: [0.16727147 0.46575417]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 2 erfolgreich gelernt!
Startgewichte: [0.70328923 0.3435243 ]
Endgewichte: [0.45933029 0.56290588]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 3 erfolgreich gelernt!
Startgewichte: [0.42162329 0.50273619]
Endgewichte: [0.94619377 0.65965447]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 4 erfolgreich gelernt!
Startgewichte: [0.32558008 0.65699815]
Endgewichte: [0.9009305  0.10769187]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 5 erfolgreich gelernt!
Startgewichte: [0.01092094 0.73031993]
Endgewichte: [0.73343041 0.91234844]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 6 erfolgreich gelernt!
Startgewichte: [0.17065617 0.85343458]
Endgewichte: [0.18958869 0.94301304]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 7 erfolgreich gelernt!
Startgewichte: [0.80329427 0.98484978]
Endgewichte: [0.80329427 0.98484978]
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.31184992 0.04067713]
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.0301024  0.87735614]
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.5540387  0.25164627]
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.13485804 0.19124343]
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.72649534 0.42532791]
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.2259335  0.80004988]
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.33726729 0.48419842]
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.73046199 0.27327398]
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.30127008 0.97128192]
Endgewichte: None
Endgültiger Bias: 0.1

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