fork download
  1. import numpy as np
  2.  
  3. # Initialisierung der Schwellenwerte
  4. lower_threshold = 0.8
  5. upper_threshold = 1.2
  6.  
  7. # Lernrate
  8. learning_rate = 0.1
  9.  
  10. # Trainingsdaten (XOR-Problem)
  11. inputs = [[0, 0], [0, 1], [1, 0], [1, 1]]
  12. targets = [0, 1, 1, 0]
  13.  
  14. # Trainingsloop mit max. 1000 Iterationen
  15. max_iterations = 1000
  16. epoch = 0
  17. network_trained = False
  18. start_weights = None
  19. final_weights = None
  20. bias = np.random.rand() # Zufälliger Start-Bias
  21.  
  22. while epoch < max_iterations:
  23. epoch += 1
  24. all_correct = True # Flag, um zu überprüfen, ob alle Ausgaben korrekt sind
  25. current_weights = np.random.rand(2) # Zufällige Startgewichte
  26.  
  27. if epoch == 1: # Die erste Iteration nach Initialisierung
  28. start_weights = current_weights # Speichere die Startgewichte
  29.  
  30. for input_vector, target in zip(inputs, targets):
  31. # Berechnung der gewichteten Summe + Bias
  32. weighted_sum = np.dot(input_vector, current_weights) + bias
  33.  
  34. # Aktivierungsfunktion (Schwellenwert)
  35. if lower_threshold < weighted_sum < upper_threshold:
  36. output = 1
  37. else:
  38. output = 0
  39.  
  40. # Fehlerberechnung
  41. error = target - output
  42.  
  43. # Wenn Fehler vorliegt, Gewichte und Bias anpassen
  44. if error != 0:
  45. all_correct = False
  46. current_weights += learning_rate * error * np.array(input_vector)
  47. bias += learning_rate * error # Bias anpassen
  48.  
  49. # Überprüfe, ob alle Ausgaben korrekt sind
  50. if all_correct:
  51. network_trained = True
  52. final_weights = current_weights # Speichere die finalen Gewichte
  53. break # Stoppe, wenn alle Ausgaben korrekt sind
  54.  
  55. # Wenn XOR nach 100 Iterationen nicht gelernt wurde, setze neue zufällige Startgewichte
  56. if epoch % 100 == 0: # 100 statt 20
  57. print(f"Nicht funktionierende Startgewichte: {start_weights}")
  58. start_weights = np.random.rand(2) # Setze neue Startgewichte
  59.  
  60. if network_trained:
  61. print(f"Das Netzwerk hat XOR korrekt nach {epoch} Iterationen gelernt.")
  62. print(f"Die Working Startgewichte waren: {start_weights}")
  63. print(f"Die finalen Gewichte sind: {final_weights}")
  64. print(f"Der Bias ist: {bias}")
  65. else:
  66. print(f"Das Netzwerk hat XOR nach {epoch} Iterationen nicht korrekt gelernt.")
  67.  
  68. # Testen des Netzwerks nach den Lern-Iterationen
  69. print("\nFinal Test Output:")
  70. for input_vector, target in zip(inputs, targets):
  71. weighted_sum = np.dot(input_vector, final_weights) + bias
  72. if lower_threshold < weighted_sum < upper_threshold:
  73. output = 1
  74. else:
  75. output = 0
  76. print(f"Input: {input_vector}, Target: {target}, Output: {output}")
  77.  
Success #stdin #stdout 0.14s 28852KB
stdin
Standard input is empty
stdout
Das Netzwerk hat XOR korrekt nach 2 Iterationen gelernt.
Die Working Startgewichte waren: [0.19773093 0.22916919]
Die finalen Gewichte sind: [0.57758066 0.56518903]
Der Bias ist: 0.44756470656278113

Final Test Output:
Input: [0, 0], Target: 0, Output: 0
Input: [0, 1], Target: 1, Output: 1
Input: [1, 0], Target: 1, Output: 1
Input: [1, 1], Target: 0, Output: 0