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. while epoch < max_iterations:
  33. epoch += 1
  34. all_correct = True # Flag, um zu überprüfen, ob alle Ausgaben korrekt sind
  35. current_weights = np.random.rand(2) # Zufällige Startgewichte
  36.  
  37. if epoch == 1: # Die erste Iteration nach Initialisierung
  38. start_weights = current_weights # Speichere die Startgewichte
  39.  
  40. for input_vector, target in zip(inputs, targets):
  41. # Berechnung der gewichteten Summe inkl. Bias
  42. weighted_sum = np.dot(input_vector, current_weights) + bias
  43.  
  44. # Aktivierungsfunktion (einfache Schwellenwertfunktion)
  45. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  46.  
  47. # Fehlerberechnung
  48. error = target - output
  49.  
  50. # Wenn ein Fehler vorliegt, dann weise die Gewichte an
  51. if error != 0:
  52. all_correct = False
  53. current_weights += learning_rate * error * np.array(input_vector)
  54.  
  55. # Überprüfe, ob alle Ausgaben korrekt sind
  56. if all_correct:
  57. network_trained = True
  58. final_weights = current_weights # Speichere die finalen Gewichte
  59. break # Stoppe, wenn alle Ausgaben korrekt sind
  60.  
  61. if network_trained:
  62. print(f"Das Netzwerk hat Wahrheitstabelle {table_index} korrekt nach {epoch} Iterationen gelernt.")
  63. print(f"Startgewichte: {start_weights}")
  64. print(f"Endgewichte: {final_weights}")
  65. print(f"Bias nach {epoch} Iterationen: {bias}")
  66. else:
  67. # Wenn das Netzwerk nach 1000 Iterationen nicht gelernt hat, füge den Bias hinzu
  68. # und starte einen weiteren Trainingsdurchlauf mit dem neuen Bias.
  69. print(f"Das Netzwerk hat Wahrheitstabelle {table_index} nach {epoch} Iterationen nicht korrekt gelernt.")
  70. print("Erhöhe den Bias und versuche es erneut.")
  71.  
  72. # Setze den Bias nach 1000 Iterationen neu
  73. bias = 0.1 # Setze den Bias zu Beginn auf 0.1
  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.  
  77. while epoch < max_iterations:
  78. epoch += 1
  79. all_correct = True
  80. current_weights = np.random.rand(2) # Zufällige Startgewichte
  81.  
  82. for input_vector, target in zip(inputs, targets):
  83. # Berechnung der gewichteten Summe inkl. Bias
  84. weighted_sum = np.dot(input_vector, current_weights) + bias
  85.  
  86. # Aktivierungsfunktion (einfache Schwellenwertfunktion)
  87. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  88.  
  89. # Fehlerberechnung
  90. error = target - output
  91.  
  92. # Wenn ein Fehler vorliegt, dann weise die Gewichte an
  93. if error != 0:
  94. all_correct = False
  95. current_weights += learning_rate * error * np.array(input_vector)
  96.  
  97. # Überprüfe, ob alle Ausgaben korrekt sind
  98. if all_correct:
  99. network_trained = True
  100. final_weights = current_weights # Speichere die finalen Gewichte
  101. break # Stoppe, wenn alle Ausgaben korrekt sind
  102.  
  103. print(f"Versuch mit neuem Bias ({bias}):")
  104. print(f"Total Iterationen: {epoch}")
  105. print(f"Startgewichte: {start_weights}")
  106. print(f"Endgewichte: {final_weights}")
  107. print(f"Endgültiger Bias: {bias}")
  108.  
  109. # Wenn das Netzwerk das Lernen abgeschlossen hat, drucke die Endergebnisse
  110. if network_trained:
  111. print(f"\nEndgültige Ergebnisse für Wahrheitstabelle {table_index}:")
  112. print(f"Startgewichte: {start_weights}")
  113. print(f"Endgewichte: {final_weights}")
  114. print(f"Endgültiger Bias: {bias}")
  115. else:
  116. print(f"\nDas Netzwerk konnte Wahrheitstabelle {table_index} nicht lernen.")
  117.  
Success #stdin #stdout 1.36s 29020KB
stdin
Standard input is empty
stdout
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) ===
Das Netzwerk hat Wahrheitstabelle 1 korrekt nach 3 Iterationen gelernt.
Startgewichte: [0.84768006 0.67426482]
Endgewichte: [0.28809429 0.37241321]
Bias nach 3 Iterationen: 0.0

Endgültige Ergebnisse für Wahrheitstabelle 1:
Startgewichte: [0.84768006 0.67426482]
Endgewichte: [0.28809429 0.37241321]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 2: Targets = (0, 0, 0, 1) ===
Das Netzwerk hat Wahrheitstabelle 2 korrekt nach 1 Iterationen gelernt.
Startgewichte: [0.25765079 0.75603535]
Endgewichte: [0.25765079 0.75603535]
Bias nach 1 Iterationen: 0.0

Endgültige Ergebnisse für Wahrheitstabelle 2:
Startgewichte: [0.25765079 0.75603535]
Endgewichte: [0.25765079 0.75603535]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 3: Targets = (0, 0, 1, 0) ===
Das Netzwerk hat Wahrheitstabelle 3 korrekt nach 8 Iterationen gelernt.
Startgewichte: [0.73253403 0.66885045]
Endgewichte: [0.91842012 0.57960876]
Bias nach 8 Iterationen: 0.0

Endgültige Ergebnisse für Wahrheitstabelle 3:
Startgewichte: [0.73253403 0.66885045]
Endgewichte: [0.91842012 0.57960876]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 4: Targets = (0, 0, 1, 1) ===
Das Netzwerk hat Wahrheitstabelle 4 korrekt nach 5 Iterationen gelernt.
Startgewichte: [0.31952453 0.29842318]
Endgewichte: [0.90745703 0.2171553 ]
Bias nach 5 Iterationen: 0.0

Endgültige Ergebnisse für Wahrheitstabelle 4:
Startgewichte: [0.31952453 0.29842318]
Endgewichte: [0.90745703 0.2171553 ]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 5: Targets = (0, 1, 0, 0) ===
Das Netzwerk hat Wahrheitstabelle 5 korrekt nach 13 Iterationen gelernt.
Startgewichte: [0.21608235 0.47015535]
Endgewichte: [0.70747334 0.88224874]
Bias nach 13 Iterationen: 0.0

Endgültige Ergebnisse für Wahrheitstabelle 5:
Startgewichte: [0.21608235 0.47015535]
Endgewichte: [0.70747334 0.88224874]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 6: Targets = (0, 1, 0, 1) ===
Das Netzwerk hat Wahrheitstabelle 6 korrekt nach 2 Iterationen gelernt.
Startgewichte: [0.79374247 0.37954923]
Endgewichte: [0.08680865 0.93245395]
Bias nach 2 Iterationen: 0.0

Endgültige Ergebnisse für Wahrheitstabelle 6:
Startgewichte: [0.79374247 0.37954923]
Endgewichte: [0.08680865 0.93245395]
Endgültiger Bias: 0.0

=== Wahrheitstabelle 7: Targets = (0, 1, 1, 0) ===
Das Netzwerk hat Wahrheitstabelle 7 korrekt nach 43 Iterationen gelernt.
Startgewichte: [0.51252556 0.20944935]
Endgewichte: [0.87207945 0.91983008]
Bias nach 43 Iterationen: 0.0

Endgültige Ergebnisse für Wahrheitstabelle 7:
Startgewichte: [0.51252556 0.20944935]
Endgewichte: [0.87207945 0.91983008]
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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.14517573 0.22533681]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 8 nicht lernen.

=== 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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.00853011 0.76983312]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 9 nicht lernen.

=== 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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.59515888 0.94734868]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 10 nicht lernen.

=== 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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.48031612 0.1395825 ]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 11 nicht lernen.

=== 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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.07631232 0.31883268]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 12 nicht lernen.

=== 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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.2371823  0.59347957]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 13 nicht lernen.

=== 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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.20948338 0.46919116]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 14 nicht lernen.

=== 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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.73880092 0.89328941]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 15 nicht lernen.

=== 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 neuem Bias (0.1):
Total Iterationen: 1000
Startgewichte: [0.57385333 0.91648684]
Endgewichte: None
Endgültiger Bias: 0.1

Das Netzwerk konnte Wahrheitstabelle 16 nicht lernen.