fork download
  1. import numpy as np
  2. import itertools
  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. # Eingabekombinationen (2 Eingänge)
  12. inputs = [[0, 0], [0, 1], [1, 0], [1, 1]]
  13.  
  14. # Generiere alle 16 möglichen Wertetabellen (Targets)
  15. all_truth_tables = list(itertools.product([0, 1], repeat=4))
  16.  
  17. # Trainingsloop für jede Wertetabelle
  18. max_iterations = 2000
  19. restart_threshold = 100
  20. results = [] # Zum Speichern der Ergebnisse für jede Wertetabelle
  21.  
  22. # Trainingsprozess für jede Wertetabelle
  23. for truth_table_idx, targets in enumerate(all_truth_tables):
  24. print(f"\nLerne Wertetabelle {truth_table_idx + 1}: Targets = {targets}")
  25.  
  26. epoch = 0
  27. network_trained = False
  28. all_epoch_outputs = []
  29.  
  30. # Initialisiere Startgewichte
  31. input_weights = np.random.rand(2) # 2 Eingänge
  32.  
  33. # Trainingsprozess für die aktuelle Wertetabelle
  34. while epoch < max_iterations:
  35. epoch += 1
  36. all_correct = True # Flag, um zu überprüfen, ob alle Ausgaben korrekt sind
  37.  
  38. epoch_outputs = [] # Outputs der aktuellen Epoche
  39.  
  40. for input_vector, target in zip(inputs, targets):
  41. # Berechnung der gewichteten Summe
  42. weighted_sum = np.dot(input_vector, input_weights)
  43.  
  44. # Dynamische Schwellenwertanpassung (für komplexe Tabellen)
  45. dynamic_lower_threshold = lower_threshold * (1 + np.abs(weighted_sum - 0.5))
  46. dynamic_upper_threshold = upper_threshold * (1 + np.abs(weighted_sum - 0.5))
  47.  
  48. # Aktivierungsfunktion (mit dynamischen Schwellenwerten)
  49. output = 1 if dynamic_lower_threshold < weighted_sum < dynamic_upper_threshold else 0
  50.  
  51. # Fehlerberechnung
  52. error = target - output
  53.  
  54. # Gewichtsanpassung (Hebb-artig)
  55. if error != 0:
  56. all_correct = False
  57. input_weights += learning_rate * error * np.array(input_vector)
  58.  
  59. epoch_outputs.append((input_vector, output, target))
  60.  
  61. all_epoch_outputs.append(epoch_outputs)
  62.  
  63. # Überprüfe, ob alle Ausgaben korrekt sind
  64. if all_correct:
  65. network_trained = True
  66. break
  67.  
  68. # Neustart der Gewichte nach `restart_threshold` Iterationen
  69. if epoch % restart_threshold == 0:
  70. print(f" -> Neustart der Startgewichte nach {epoch} Iterationen.")
  71. input_weights = np.random.rand(2)
  72.  
  73. # Ergebnisse speichern
  74. results.append({
  75. "truth_table_idx": truth_table_idx + 1,
  76. "targets": targets,
  77. "epochs": epoch,
  78. "network_trained": network_trained,
  79. "final_weights": input_weights,
  80. "all_epoch_outputs": all_epoch_outputs
  81. })
  82.  
  83. # Statusmeldung
  84. if network_trained:
  85. print(f" -> Wertetabelle korrekt gelernt nach {epoch} Iterationen.")
  86. else:
  87. print(f" -> Netzwerk konnte die Wertetabelle nicht lernen.")
  88.  
  89. # Alle Ergebnisse anzeigen
  90. print("\nZusammenfassung der Ergebnisse:")
  91. for result in results:
  92. print(f"Wertetabelle {result['truth_table_idx']}: Targets = {result['targets']}")
  93. print(f" -> Erfolg: {'Ja' if result['network_trained'] else 'Nein'}")
  94. print(f" -> Benötigte Epochen: {result['epochs']}")
  95. if result["network_trained"]:
  96. print(f" -> Finale Gewichte: {result['final_weights']}")
  97. print()
  98.  
Success #stdin #stdout 1.46s 35140KB
stdin
Standard input is empty
stdout
Lerne Wertetabelle 1: Targets = (0, 0, 0, 0)
  -> Wertetabelle korrekt gelernt nach 1 Iterationen.

Lerne Wertetabelle 2: Targets = (0, 0, 0, 1)
  -> Wertetabelle korrekt gelernt nach 7 Iterationen.

Lerne Wertetabelle 3: Targets = (0, 0, 1, 0)
  -> Wertetabelle korrekt gelernt nach 23 Iterationen.

Lerne Wertetabelle 4: Targets = (0, 0, 1, 1)
  -> Wertetabelle korrekt gelernt nach 10 Iterationen.

Lerne Wertetabelle 5: Targets = (0, 1, 0, 0)
  -> Wertetabelle korrekt gelernt nach 29 Iterationen.

Lerne Wertetabelle 6: Targets = (0, 1, 0, 1)
  -> Wertetabelle korrekt gelernt nach 14 Iterationen.

Lerne Wertetabelle 7: Targets = (0, 1, 1, 0)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 8: Targets = (0, 1, 1, 1)
  -> Wertetabelle korrekt gelernt nach 16 Iterationen.

Lerne Wertetabelle 9: Targets = (1, 0, 0, 0)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 10: Targets = (1, 0, 0, 1)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 11: Targets = (1, 0, 1, 0)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 12: Targets = (1, 0, 1, 1)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 13: Targets = (1, 1, 0, 0)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 14: Targets = (1, 1, 0, 1)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 15: Targets = (1, 1, 1, 0)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 16: Targets = (1, 1, 1, 1)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Neustart der Startgewichte nach 300 Iterationen.
  -> Neustart der Startgewichte nach 400 Iterationen.
  -> Neustart der Startgewichte nach 500 Iterationen.
  -> Neustart der Startgewichte nach 600 Iterationen.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Neustart der Startgewichte nach 900 Iterationen.
  -> Neustart der Startgewichte nach 1000 Iterationen.
  -> Neustart der Startgewichte nach 1100 Iterationen.
  -> Neustart der Startgewichte nach 1200 Iterationen.
  -> Neustart der Startgewichte nach 1300 Iterationen.
  -> Neustart der Startgewichte nach 1400 Iterationen.
  -> Neustart der Startgewichte nach 1500 Iterationen.
  -> Neustart der Startgewichte nach 1600 Iterationen.
  -> Neustart der Startgewichte nach 1700 Iterationen.
  -> Neustart der Startgewichte nach 1800 Iterationen.
  -> Neustart der Startgewichte nach 1900 Iterationen.
  -> Neustart der Startgewichte nach 2000 Iterationen.
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Zusammenfassung der Ergebnisse:
Wertetabelle 1: Targets = (0, 0, 0, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 1
  -> Finale Gewichte: [0.60553854 0.71094329]

Wertetabelle 2: Targets = (0, 0, 0, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 7
  -> Finale Gewichte: [1.10703442 0.93214528]

Wertetabelle 3: Targets = (0, 0, 1, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 23
  -> Finale Gewichte: [ 2.01767185 -0.02023968]

Wertetabelle 4: Targets = (0, 0, 1, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 10
  -> Finale Gewichte: [2.03663213 0.57853456]

Wertetabelle 5: Targets = (0, 1, 0, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 29
  -> Finale Gewichte: [-0.04360011  2.00689826]

Wertetabelle 6: Targets = (0, 1, 0, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 14
  -> Finale Gewichte: [0.97244188 2.04695464]

Wertetabelle 7: Targets = (0, 1, 1, 0)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000

Wertetabelle 8: Targets = (0, 1, 1, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 16
  -> Finale Gewichte: [2.05248772 2.01282728]

Wertetabelle 9: Targets = (1, 0, 0, 0)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000

Wertetabelle 10: Targets = (1, 0, 0, 1)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000

Wertetabelle 11: Targets = (1, 0, 1, 0)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000

Wertetabelle 12: Targets = (1, 0, 1, 1)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000

Wertetabelle 13: Targets = (1, 1, 0, 0)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000

Wertetabelle 14: Targets = (1, 1, 0, 1)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000

Wertetabelle 15: Targets = (1, 1, 1, 0)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000

Wertetabelle 16: Targets = (1, 1, 1, 1)
  -> Erfolg: Nein
  -> Benötigte Epochen: 2000