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 = 200 # Maximal 200 Iterationen für jedes Bias
  23. epoch = 0
  24. network_trained = False
  25. start_weights = None
  26. final_weights = None
  27. bias = 0.0 # Initial Bias ist 0.0
  28. bias_increment = 0.1 # Bias-Inkrement
  29. max_bias = 1.3 # Maximaler Bias
  30. min_bias = -1.3 # Minimaler 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 (Schwellenwertfunktion mit zwei Schwellenwerten)
  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. if network_trained:
  63. print(f"Das Netzwerk hat Wahrheitstabelle {table_index} erfolgreich nach {epoch} Iterationen gelernt.")
  64. print(f"Startgewichte: {start_weights}")
  65. print(f"Endgewichte: {final_weights}")
  66. print(f"Endgültiger Bias: {bias}")
  67. continue # Zum nächsten Wahrheitstabelle
  68.  
  69. # Wenn das Netzwerk nach 200 Iterationen nicht gelernt hat, füge den Bias hinzu
  70. print(f"Das Netzwerk hat Wahrheitstabelle {table_index} nach {epoch} Iterationen nicht korrekt gelernt.")
  71. print("Erhöhe den Bias und versuche es erneut.")
  72.  
  73. # Bias erhöhen in Schritten bis max_bias und dann bis min_bias
  74. bias = 0.0
  75. for bias in np.arange(0.1, max_bias + bias_increment, bias_increment): # Bias von 0.1 bis 1.3
  76. print(f"Versuch mit Bias {bias}:")
  77. epoch = 0
  78. start_weights = np.random.rand(2) # Zufällige Startgewichte für die erneute Trainingsrunde
  79. network_trained = False # Netzwerk muss erneut trainiert werden
  80.  
  81. while epoch < max_iterations:
  82. epoch += 1
  83. all_correct = True
  84. current_weights = np.random.rand(2) # Zufällige Startgewichte
  85.  
  86. for input_vector, target in zip(inputs, targets):
  87. # Berechnung der gewichteten Summe inkl. Bias
  88. weighted_sum = np.dot(input_vector, current_weights) + bias
  89.  
  90. # Aktivierungsfunktion (Schwellenwertfunktion mit zwei Schwellenwerten)
  91. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  92.  
  93. # Fehlerberechnung
  94. error = target - output
  95.  
  96. # Wenn ein Fehler vorliegt, dann weise die Gewichte an
  97. if error != 0:
  98. all_correct = False
  99. current_weights += learning_rate * error * np.array(input_vector)
  100.  
  101. # Überprüfe, ob alle Ausgaben korrekt sind
  102. if all_correct:
  103. network_trained = True
  104. final_weights = current_weights # Speichere die finalen Gewichte
  105. break # Stoppe, wenn alle Ausgaben korrekt sind
  106.  
  107. if network_trained:
  108. break # Das Netzwerk hat jetzt gelernt
  109.  
  110. # Bias verringern und erneut testen, wenn das Netzwerk nicht erfolgreich war
  111. if not network_trained:
  112. print("Erhöhe den Bias bis zum maximalen Wert und versuche es dann mit abnehmendem Bias.")
  113. for bias in np.arange(max_bias, min_bias - bias_increment, -bias_increment): # Bias von 1.3 bis -1.3
  114. print(f"Versuch mit Bias {bias}:")
  115. epoch = 0
  116. start_weights = np.random.rand(2) # Zufällige Startgewichte für die erneute Trainingsrunde
  117. network_trained = False # Netzwerk muss erneut trainiert werden
  118.  
  119. while epoch < max_iterations:
  120. epoch += 1
  121. all_correct = True
  122. current_weights = np.random.rand(2) # Zufällige Startgewichte
  123.  
  124. for input_vector, target in zip(inputs, targets):
  125. # Berechnung der gewichteten Summe inkl. Bias
  126. weighted_sum = np.dot(input_vector, current_weights) + bias
  127.  
  128. # Aktivierungsfunktion (Schwellenwertfunktion mit zwei Schwellenwerten)
  129. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  130.  
  131. # Fehlerberechnung
  132. error = target - output
  133.  
  134. # Wenn ein Fehler vorliegt, dann weise die Gewichte an
  135. if error != 0:
  136. all_correct = False
  137. current_weights += learning_rate * error * np.array(input_vector)
  138.  
  139. # Überprüfe, ob alle Ausgaben korrekt sind
  140. if all_correct:
  141. network_trained = True
  142. final_weights = current_weights # Speichere die finalen Gewichte
  143. break # Stoppe, wenn alle Ausgaben korrekt sind
  144.  
  145. if network_trained:
  146. break # Das Netzwerk hat jetzt gelernt
  147.  
  148. # Ausgabe der Ergebnisse nach der Anpassung des Bias
  149. print(f"Total Iterationen: {epoch}")
  150. print(f"Startgewichte: {start_weights}")
  151. print(f"Endgewichte: {final_weights}")
  152. print(f"Endgültiger Bias: {bias}")
  153.  
  154. # Prüfen, ob das Netzwerk die Tabelle erfolgreich gelernt hat
  155. if network_trained:
  156. print(f"\nDas Netzwerk hat Wahrheitstabelle {table_index} erfolgreich gelernt!")
  157. print(f"Startgewichte: {start_weights}")
  158. print(f"Endgewichte: {final_weights}")
  159. print(f"Endgültiger Bias: {bias}")
  160.  
Success #stdin #stdout 1.83s 28880KB
stdin
Standard input is empty
stdout
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) ===
Das Netzwerk hat Wahrheitstabelle 1 erfolgreich nach 1 Iterationen gelernt.
Startgewichte: [0.6816314  0.52659151]
Endgewichte: [0.6816314  0.52659151]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 2: Targets = (0, 0, 0, 1) ===
Das Netzwerk hat Wahrheitstabelle 2 erfolgreich nach 10 Iterationen gelernt.
Startgewichte: [0.815406   0.87987759]
Endgewichte: [0.48357173 0.40528079]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 3: Targets = (0, 0, 1, 0) ===
Das Netzwerk hat Wahrheitstabelle 3 erfolgreich nach 21 Iterationen gelernt.
Startgewichte: [0.19847691 0.45170207]
Endgewichte: [0.80476068 0.44196812]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 4: Targets = (0, 0, 1, 1) ===
Das Netzwerk hat Wahrheitstabelle 4 erfolgreich nach 9 Iterationen gelernt.
Startgewichte: [0.92557479 0.99193489]
Endgewichte: [0.94263017 0.22674606]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 5: Targets = (0, 1, 0, 0) ===
Das Netzwerk hat Wahrheitstabelle 5 erfolgreich nach 2 Iterationen gelernt.
Startgewichte: [0.82732331 0.99037784]
Endgewichte: [0.75390959 0.93532492]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 6: Targets = (0, 1, 0, 1) ===
Das Netzwerk hat Wahrheitstabelle 6 erfolgreich nach 4 Iterationen gelernt.
Startgewichte: [0.78439986 0.89577553]
Endgewichte: [0.06204915 0.94049761]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 7: Targets = (0, 1, 1, 0) ===
Das Netzwerk hat Wahrheitstabelle 7 erfolgreich nach 1 Iterationen gelernt.
Startgewichte: [0.88153153 0.99630401]
Endgewichte: [0.88153153 0.99630401]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 8: Targets = (0, 1, 1, 1) ===
Das Netzwerk hat Wahrheitstabelle 8 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Total Iterationen: 53
Startgewichte: [0.25680673 0.28427442]
Endgewichte: [0.37158196 0.30904339]
Endgültiger Bias: 0.5

Das Netzwerk hat Wahrheitstabelle 8 erfolgreich gelernt!
Startgewichte: [0.25680673 0.28427442]
Endgewichte: [0.37158196 0.30904339]
Endgültiger Bias: 0.5

=== Wahrheitstabelle 9: Targets = (1, 0, 0, 0) ===
Das Netzwerk hat Wahrheitstabelle 9 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Versuch mit Bias 0.6:
Versuch mit Bias 0.7000000000000001:
Versuch mit Bias 0.8:
Versuch mit Bias 0.9:
Total Iterationen: 1
Startgewichte: [0.13011074 0.36105744]
Endgewichte: [0.86290517 0.43248062]
Endgültiger Bias: 0.9

Das Netzwerk hat Wahrheitstabelle 9 erfolgreich gelernt!
Startgewichte: [0.13011074 0.36105744]
Endgewichte: [0.86290517 0.43248062]
Endgültiger Bias: 0.9

=== Wahrheitstabelle 10: Targets = (1, 0, 0, 1) ===
Das Netzwerk hat Wahrheitstabelle 10 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Versuch mit Bias 0.6:
Versuch mit Bias 0.7000000000000001:
Versuch mit Bias 0.8:
Versuch mit Bias 0.9:
Versuch mit Bias 1.0:
Versuch mit Bias 1.1:
Versuch mit Bias 1.2000000000000002:
Versuch mit Bias 1.3000000000000003:
Erhöhe den Bias bis zum maximalen Wert und versuche es dann mit abnehmendem Bias.
Versuch mit Bias 1.3:
Versuch mit Bias 1.2:
Versuch mit Bias 1.0999999999999999:
Versuch mit Bias 0.9999999999999998:
Versuch mit Bias 0.8999999999999997:
Versuch mit Bias 0.7999999999999996:
Versuch mit Bias 0.6999999999999995:
Versuch mit Bias 0.5999999999999994:
Versuch mit Bias 0.49999999999999933:
Versuch mit Bias 0.39999999999999925:
Versuch mit Bias 0.29999999999999916:
Versuch mit Bias 0.19999999999999907:
Versuch mit Bias 0.09999999999999898:
Versuch mit Bias -1.1102230246251565e-15:
Versuch mit Bias -0.1000000000000012:
Versuch mit Bias -0.2000000000000013:
Versuch mit Bias -0.3000000000000014:
Versuch mit Bias -0.40000000000000147:
Versuch mit Bias -0.5000000000000016:
Versuch mit Bias -0.6000000000000016:
Versuch mit Bias -0.7000000000000017:
Versuch mit Bias -0.8000000000000018:
Versuch mit Bias -0.9000000000000019:
Versuch mit Bias -1.000000000000002:
Versuch mit Bias -1.100000000000002:
Versuch mit Bias -1.2000000000000022:
Versuch mit Bias -1.3000000000000023:
Total Iterationen: 200
Startgewichte: [0.30418947 0.22355268]
Endgewichte: None
Endgültiger Bias: -1.3000000000000023

=== Wahrheitstabelle 11: Targets = (1, 0, 1, 0) ===
Das Netzwerk hat Wahrheitstabelle 11 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Versuch mit Bias 0.6:
Versuch mit Bias 0.7000000000000001:
Versuch mit Bias 0.8:
Versuch mit Bias 0.9:
Total Iterationen: 4
Startgewichte: [0.44818777 0.19624452]
Endgewichte: [0.08286214 0.31786431]
Endgültiger Bias: 0.9

Das Netzwerk hat Wahrheitstabelle 11 erfolgreich gelernt!
Startgewichte: [0.44818777 0.19624452]
Endgewichte: [0.08286214 0.31786431]
Endgültiger Bias: 0.9

=== Wahrheitstabelle 12: Targets = (1, 0, 1, 1) ===
Das Netzwerk hat Wahrheitstabelle 12 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Versuch mit Bias 0.6:
Versuch mit Bias 0.7000000000000001:
Versuch mit Bias 0.8:
Versuch mit Bias 0.9:
Versuch mit Bias 1.0:
Versuch mit Bias 1.1:
Versuch mit Bias 1.2000000000000002:
Versuch mit Bias 1.3000000000000003:
Erhöhe den Bias bis zum maximalen Wert und versuche es dann mit abnehmendem Bias.
Versuch mit Bias 1.3:
Versuch mit Bias 1.2:
Versuch mit Bias 1.0999999999999999:
Versuch mit Bias 0.9999999999999998:
Versuch mit Bias 0.8999999999999997:
Versuch mit Bias 0.7999999999999996:
Versuch mit Bias 0.6999999999999995:
Versuch mit Bias 0.5999999999999994:
Versuch mit Bias 0.49999999999999933:
Versuch mit Bias 0.39999999999999925:
Versuch mit Bias 0.29999999999999916:
Versuch mit Bias 0.19999999999999907:
Versuch mit Bias 0.09999999999999898:
Versuch mit Bias -1.1102230246251565e-15:
Versuch mit Bias -0.1000000000000012:
Versuch mit Bias -0.2000000000000013:
Versuch mit Bias -0.3000000000000014:
Versuch mit Bias -0.40000000000000147:
Versuch mit Bias -0.5000000000000016:
Versuch mit Bias -0.6000000000000016:
Versuch mit Bias -0.7000000000000017:
Versuch mit Bias -0.8000000000000018:
Versuch mit Bias -0.9000000000000019:
Versuch mit Bias -1.000000000000002:
Versuch mit Bias -1.100000000000002:
Versuch mit Bias -1.2000000000000022:
Versuch mit Bias -1.3000000000000023:
Total Iterationen: 200
Startgewichte: [0.96545522 0.5583395 ]
Endgewichte: None
Endgültiger Bias: -1.3000000000000023

=== Wahrheitstabelle 13: Targets = (1, 1, 0, 0) ===
Das Netzwerk hat Wahrheitstabelle 13 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Versuch mit Bias 0.6:
Versuch mit Bias 0.7000000000000001:
Versuch mit Bias 0.8:
Versuch mit Bias 0.9:
Total Iterationen: 3
Startgewichte: [0.44835199 0.29519782]
Endgewichte: [0.81403369 0.23580171]
Endgültiger Bias: 0.9

Das Netzwerk hat Wahrheitstabelle 13 erfolgreich gelernt!
Startgewichte: [0.44835199 0.29519782]
Endgewichte: [0.81403369 0.23580171]
Endgültiger Bias: 0.9

=== Wahrheitstabelle 14: Targets = (1, 1, 0, 1) ===
Das Netzwerk hat Wahrheitstabelle 14 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Versuch mit Bias 0.6:
Versuch mit Bias 0.7000000000000001:
Versuch mit Bias 0.8:
Versuch mit Bias 0.9:
Versuch mit Bias 1.0:
Versuch mit Bias 1.1:
Versuch mit Bias 1.2000000000000002:
Versuch mit Bias 1.3000000000000003:
Erhöhe den Bias bis zum maximalen Wert und versuche es dann mit abnehmendem Bias.
Versuch mit Bias 1.3:
Versuch mit Bias 1.2:
Versuch mit Bias 1.0999999999999999:
Versuch mit Bias 0.9999999999999998:
Versuch mit Bias 0.8999999999999997:
Versuch mit Bias 0.7999999999999996:
Versuch mit Bias 0.6999999999999995:
Versuch mit Bias 0.5999999999999994:
Versuch mit Bias 0.49999999999999933:
Versuch mit Bias 0.39999999999999925:
Versuch mit Bias 0.29999999999999916:
Versuch mit Bias 0.19999999999999907:
Versuch mit Bias 0.09999999999999898:
Versuch mit Bias -1.1102230246251565e-15:
Versuch mit Bias -0.1000000000000012:
Versuch mit Bias -0.2000000000000013:
Versuch mit Bias -0.3000000000000014:
Versuch mit Bias -0.40000000000000147:
Versuch mit Bias -0.5000000000000016:
Versuch mit Bias -0.6000000000000016:
Versuch mit Bias -0.7000000000000017:
Versuch mit Bias -0.8000000000000018:
Versuch mit Bias -0.9000000000000019:
Versuch mit Bias -1.000000000000002:
Versuch mit Bias -1.100000000000002:
Versuch mit Bias -1.2000000000000022:
Versuch mit Bias -1.3000000000000023:
Total Iterationen: 200
Startgewichte: [0.87973312 0.49259202]
Endgewichte: None
Endgültiger Bias: -1.3000000000000023

=== Wahrheitstabelle 15: Targets = (1, 1, 1, 0) ===
Das Netzwerk hat Wahrheitstabelle 15 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Versuch mit Bias 0.6:
Versuch mit Bias 0.7000000000000001:
Versuch mit Bias 0.8:
Versuch mit Bias 0.9:
Total Iterationen: 5
Startgewichte: [0.81309769 0.50878497]
Endgewichte: [0.04627108 0.26551776]
Endgültiger Bias: 0.9

Das Netzwerk hat Wahrheitstabelle 15 erfolgreich gelernt!
Startgewichte: [0.81309769 0.50878497]
Endgewichte: [0.04627108 0.26551776]
Endgültiger Bias: 0.9

=== Wahrheitstabelle 16: Targets = (1, 1, 1, 1) ===
Das Netzwerk hat Wahrheitstabelle 16 nach 200 Iterationen nicht korrekt gelernt.
Erhöhe den Bias und versuche es erneut.
Versuch mit Bias 0.1:
Versuch mit Bias 0.2:
Versuch mit Bias 0.30000000000000004:
Versuch mit Bias 0.4:
Versuch mit Bias 0.5:
Versuch mit Bias 0.6:
Versuch mit Bias 0.7000000000000001:
Versuch mit Bias 0.8:
Versuch mit Bias 0.9:
Total Iterationen: 8
Startgewichte: [0.69128682 0.3937637 ]
Endgewichte: [0.03132715 0.22697578]
Endgültiger Bias: 0.9

Das Netzwerk hat Wahrheitstabelle 16 erfolgreich gelernt!
Startgewichte: [0.69128682 0.3937637 ]
Endgewichte: [0.03132715 0.22697578]
Endgültiger Bias: 0.9