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.19s 28876KB
stdin
Standard input is empty
stdout
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) ===

Das Netzwerk hat Wahrheitstabelle 1 erfolgreich gelernt!
Startgewichte: [0.56559241 0.06118599]
Endgewichte: [0.76004724 0.55209149]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 2 erfolgreich gelernt!
Startgewichte: [0.9874637  0.96765139]
Endgewichte: [0.4370784  0.59634726]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 3 erfolgreich gelernt!
Startgewichte: [0.68439298 0.06576694]
Endgewichte: [0.81794364 0.55361796]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 4 erfolgreich gelernt!
Startgewichte: [0.2273946  0.18996731]
Endgewichte: [0.99931742 0.01928233]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 5 erfolgreich gelernt!
Startgewichte: [0.82898689 0.87136358]
Endgewichte: [0.72856448 0.82151338]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 6 erfolgreich gelernt!
Startgewichte: [0.61425568 1.01849053]
Endgewichte: [0.17721292 0.99483894]
Endgültiger Bias: 0.0

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

Das Netzwerk hat Wahrheitstabelle 7 erfolgreich gelernt!
Startgewichte: [0.49036048 0.85089501]
Endgewichte: [0.91308815 0.8337495 ]
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.33959449 0.20978863]
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.63912593 0.16711602]
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.83318809 0.16302887]
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.92267583 0.50988735]
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.70000309 0.36085719]
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.0420691  0.40539302]
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.75345675 0.52012236]
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.70669632 0.17137626]
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.53750958 0.12789688]
Endgewichte: None
Endgültiger Bias: 0.1

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