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 = 1000
  19. results = [] # Zum Speichern der Ergebnisse für jede Wertetabelle
  20.  
  21. for truth_table_idx, targets in enumerate(all_truth_tables):
  22. print(f"\nLerne Wertetabelle {truth_table_idx + 1}: Targets = {targets}")
  23.  
  24. epoch = 0
  25. network_trained = False
  26. start_weights = None
  27. final_weights = None
  28. all_epoch_outputs = [] # Outputs jeder Epoche (Debugging und Transparenz)
  29.  
  30. # Trainingsprozess für die aktuelle Wertetabelle
  31. while epoch < max_iterations:
  32. epoch += 1
  33. all_correct = True # Flag, um zu überprüfen, ob alle Ausgaben korrekt sind
  34. current_weights = np.random.rand(2) # Zufällige Startgewichte
  35.  
  36. if epoch == 1: # Erste Iteration
  37. start_weights = current_weights # Speichere die Startgewichte
  38.  
  39. epoch_outputs = [] # Outputs der aktuellen Epoche
  40.  
  41. for input_vector, target in zip(inputs, targets):
  42. # Berechnung der gewichteten Summe
  43. weighted_sum = np.dot(input_vector, current_weights)
  44.  
  45. # Aktivierungsfunktion (Schwellenwert-Funktion)
  46. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  47.  
  48. # Fehlerberechnung
  49. error = target - output
  50.  
  51. # Gewichtsanpassung (Hebb-artig)
  52. if error != 0:
  53. all_correct = False
  54. current_weights += learning_rate * error * np.array(input_vector)
  55.  
  56. epoch_outputs.append((input_vector, output, target))
  57.  
  58. all_epoch_outputs.append(epoch_outputs)
  59.  
  60. # Überprüfe, ob alle Ausgaben korrekt sind
  61. if all_correct:
  62. network_trained = True
  63. final_weights = current_weights # Speichere die finalen Gewichte
  64. break
  65.  
  66. # Ergebnisse speichern
  67. results.append({
  68. "truth_table_idx": truth_table_idx + 1,
  69. "targets": targets,
  70. "epochs": epoch,
  71. "network_trained": network_trained,
  72. "final_weights": final_weights,
  73. "all_epoch_outputs": all_epoch_outputs
  74. })
  75.  
  76. # Statusmeldung
  77. if network_trained:
  78. print(f" -> XOR korrekt gelernt nach {epoch} Iterationen.")
  79. else:
  80. print(f" -> Netzwerk konnte die Wertetabelle nicht lernen.")
  81.  
  82. # Alle Ergebnisse anzeigen
  83. print("\nZusammenfassung der Ergebnisse:")
  84. for result in results:
  85. print(f"Wertetabelle {result['truth_table_idx']}: Targets = {result['targets']}")
  86. print(f" -> Erfolg: {'Ja' if result['network_trained'] else 'Nein'}")
  87. print(f" -> Benötigte Epochen: {result['epochs']}")
  88. if result["network_trained"]:
  89. print(f" -> Finale Gewichte: {result['final_weights']}")
  90. print()
  91.  
Success #stdin #stdout 0.63s 32528KB
stdin
Standard input is empty
stdout
Lerne Wertetabelle 1: Targets = (0, 0, 0, 0)
  -> XOR korrekt gelernt nach 2 Iterationen.

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

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

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

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

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

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

Lerne Wertetabelle 8: Targets = (0, 1, 1, 1)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 9: Targets = (1, 0, 0, 0)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 10: Targets = (1, 0, 0, 1)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 11: Targets = (1, 0, 1, 0)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 12: Targets = (1, 0, 1, 1)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 13: Targets = (1, 1, 0, 0)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 14: Targets = (1, 1, 0, 1)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 15: Targets = (1, 1, 1, 0)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

Lerne Wertetabelle 16: Targets = (1, 1, 1, 1)
  -> Netzwerk konnte die Wertetabelle nicht lernen.

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

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

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

Wertetabelle 4: Targets = (0, 0, 1, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 23
  -> Finale Gewichte: [0.81084912 0.3079414 ]

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

Wertetabelle 6: Targets = (0, 1, 0, 1)
  -> Erfolg: Ja
  -> Benötigte Epochen: 5
  -> Finale Gewichte: [0.06760633 0.81402238]

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

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

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

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

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

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

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

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

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

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