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

Lerne Wertetabelle 3: Targets = (0, 0, 1, 0)
  -> Neustart der Startgewichte nach 100 Iterationen.
  -> Neustart der Startgewichte nach 200 Iterationen.
  -> Wertetabelle korrekt gelernt nach 201 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.
  -> Neustart der Startgewichte nach 700 Iterationen.
  -> Neustart der Startgewichte nach 800 Iterationen.
  -> Wertetabelle korrekt gelernt nach 803 Iterationen.

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

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

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

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.
  -> Wertetabelle korrekt gelernt nach 1002 Iterationen.

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.
  -> Wertetabelle korrekt gelernt nach 404 Iterationen.

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: (array([[0.5851295 , 0.19235807],
       [0.57493352, 0.05066171]]), array([0.30770314, 0.30859085]), 0.2778218068650453)

Wertetabelle 2: Targets = (0, 0, 0, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 502
  -> Finale Gewichte: (array([[0.28629541, 1.02019086],
       [0.49392165, 0.77712202]]), array([0.97936067, 0.44133541]), 0.288450575651956)

Wertetabelle 3: Targets = (0, 0, 1, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 201
  -> Finale Gewichte: (array([[0.94098218, 0.10935012],
       [0.08524996, 0.41683261]]), array([0.70044211, 0.93766221]), 0.9154780695728781)

Wertetabelle 4: Targets = (0, 0, 1, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 803
  -> Finale Gewichte: (array([[0.43217799, 0.58875049],
       [0.10231813, 0.22422733]]), array([ 0.84333053, -0.03138878]), 0.6462941688118394)

Wertetabelle 5: Targets = (0, 1, 0, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 302
  -> Finale Gewichte: (array([[0.78426564, 0.24348247],
       [0.22440368, 0.55878307]]), array([0.80038584, 0.70182291]), 0.9175700550333568)

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

Wertetabelle 7: Targets = (0, 1, 1, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 801
  -> Finale Gewichte: (array([[0.22998794, 0.93247354],
       [0.33538129, 0.23422299]]), array([0.81011972, 0.06114461]), 0.7024014067877569)

Wertetabelle 8: Targets = (0, 1, 1, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 402
  -> Finale Gewichte: (array([[0.69459658, 0.316327  ],
       [0.20195694, 0.21488333]]), array([0.34345964, 0.99125499]), 0.5966283986953708)

Wertetabelle 9: Targets = (1, 0, 0, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 9
  -> Finale Gewichte: (array([[0.61622452, 0.69180513],
       [0.39137261, 0.90877221]]), array([0.3561036 , 0.63244842]), 0.9496537915436678)

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

Wertetabelle 11: Targets = (1, 0, 1, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 1002
  -> Finale Gewichte: (array([[0.09944728, 0.19289201],
       [0.97821243, 0.03276941]]), array([0.70825253, 0.19503549]), 0.9413782841249497)

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

Wertetabelle 13: Targets = (1, 1, 0, 0)
  -> Erfolg: Ja
  -> Benötigte Epochen: 404
  -> Finale Gewichte: (array([[0.22017955, 0.51031183],
       [0.08854769, 0.13270222]]), array([0.75082598, 0.23440754]), 0.8956799660999234)

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