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 Gewichte für Eingabe, versteckte Schicht und Ausgangsschicht
  31. input_weights = np.random.rand(2, 2) # 2 Eingänge, 2 Neuronen in der versteckten Schicht
  32. output_weights = np.random.rand(2) # 2 Neuronen in der versteckten Schicht, 1 Ausgang
  33.  
  34. # Trainingsprozess für die aktuelle Wertetabelle
  35. while epoch < max_iterations:
  36. epoch += 1
  37. all_correct = True # Flag, um zu überprüfen, ob alle Ausgaben korrekt sind
  38.  
  39. epoch_outputs = [] # Outputs der aktuellen Epoche
  40.  
  41. for input_vector, target in zip(inputs, targets):
  42. # Berechnung der gewichteten Summe für die versteckten Schichten
  43. hidden_layer_input = np.dot(input_vector, input_weights)
  44. # Aktivierungsfunktion für versteckte Schicht
  45. hidden_layer_output = np.where((hidden_layer_input > lower_threshold) & (hidden_layer_input < upper_threshold), 1, 0)
  46.  
  47. # Berechnung der gewichteten Summe für die Ausgangsschicht
  48. output_layer_input = np.dot(hidden_layer_output, output_weights)
  49. # Aktivierungsfunktion für Ausgangsschicht
  50. output = 1 if lower_threshold < output_layer_input < upper_threshold else 0
  51.  
  52. # Fehlerberechnung
  53. error = target - output
  54.  
  55. # Gewichtsanpassung (Hebb-artig für Eingabeschicht und Ausgangsschicht)
  56. if error != 0:
  57. all_correct = False
  58. input_weights += learning_rate * error * np.outer(input_vector, output_weights)
  59. output_weights += learning_rate * error * hidden_layer_output
  60.  
  61. epoch_outputs.append((input_vector, output, target))
  62.  
  63. all_epoch_outputs.append(epoch_outputs)
  64.  
  65. # Überprüfe, ob alle Ausgaben korrekt sind
  66. if all_correct:
  67. network_trained = True
  68. break
  69.  
  70. # Neustart der Gewichte nach `restart_threshold` Iterationen
  71. if epoch % restart_threshold == 0:
  72. print(f" -> Neustart der Startgewichte nach {epoch} Iterationen.")
  73. input_weights = np.random.rand(2, 2)
  74. output_weights = np.random.rand(2)
  75.  
  76. # Ergebnisse speichern
  77. results.append({
  78. "truth_table_idx": truth_table_idx + 1,
  79. "targets": targets,
  80. "epochs": epoch,
  81. "network_trained": network_trained,
  82. "final_weights": (input_weights, output_weights),
  83. "all_epoch_outputs": all_epoch_outputs
  84. })
  85.  
  86. # Statusmeldung
  87. if network_trained:
  88. print(f" -> Wertetabelle korrekt gelernt nach {epoch} Iterationen.")
  89. else:
  90. print(f" -> Netzwerk konnte die Wertetabelle nicht lernen.")
  91.  
  92. # Alle Ergebnisse anzeigen
  93. print("\nZusammenfassung der Ergebnisse:")
  94. for result in results:
  95. print(f"Wertetabelle {result['truth_table_idx']}: Targets = {result['targets']}")
  96. print(f" -> Erfolg: {'Ja' if result['network_trained'] else 'Nein'}")
  97. print(f" -> Benötigte Epochen: {result['epochs']}")
  98. if result["network_trained"]:
  99. print(f" -> Finale Gewichte: {result['final_weights']}")
  100. print()
  101.  
Success #stdin #stdout 2.52s 34856KB
stdin
Standard input is empty
stdout
Lerne Wertetabelle 1: Targets = (0, 0, 0, 0)
  -> Wertetabelle korrekt gelernt nach 2 Iterationen.

Lerne Wertetabelle 2: Targets = (0, 0, 0, 1)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Wertetabelle korrekt gelernt nach 104 Iterationen.

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

Lerne Wertetabelle 4: Targets = (0, 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.
  -> Wertetabelle korrekt gelernt nach 602 Iterationen.

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

Lerne Wertetabelle 6: Targets = (0, 1, 0, 1)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Wertetabelle korrekt gelernt nach 205 Iterationen.

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

Lerne Wertetabelle 8: Targets = (0, 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.
  -> Wertetabelle korrekt gelernt nach 802 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: 2
  -> Finale Gewichte: (array([[0.12225423, 0.41212297],
       [0.1791091 , 0.83942515]]), array([0.93498635, 0.73819946]))

Wertetabelle 2: Targets = (0, 0, 0, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 104
  -> Finale Gewichte: (array([[0.22148931, 0.94683581],
       [0.61758006, 0.23438772]]), array([0.40187525, 0.6671212 ]))

Wertetabelle 3: Targets = (0, 0, 1, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 12
  -> Finale Gewichte: (array([[0.91985878, 0.50271096],
       [0.64698088, 0.26553459]]), array([ 0.87771572, -0.03936586]))

Wertetabelle 4: Targets = (0, 0, 1, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 602
  -> Finale Gewichte: (array([[0.6428471 , 0.90413845],
       [0.76152285, 0.16619797]]), array([0.69654416, 0.86499485]))

Wertetabelle 5: Targets = (0, 1, 0, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 10
  -> Finale Gewichte: (array([[-0.21411862,  0.73901971],
       [ 1.05686883,  0.07579435]]), array([ 0.84735526, -0.07709391]))

Wertetabelle 6: Targets = (0, 1, 0, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 205
  -> Finale Gewichte: (array([[1.01390014, 0.15675933],
       [0.62462884, 0.96478194]]), array([0.72835451, 0.89659604]))

Wertetabelle 7: Targets = (0, 1, 1, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 4
  -> Finale Gewichte: (array([[0.45888592, 0.86251307],
       [0.49687477, 0.87773283]]), array([0.77197466, 0.88870978]))

Wertetabelle 8: Targets = (0, 1, 1, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 802
  -> Finale Gewichte: (array([[0.98367197, 0.14699211],
       [0.28216569, 0.94247442]]), array([0.84826987, 0.87541319]))

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