fork download
  1. import numpy as np
  2. from itertools import product # To generate all binary combinations
  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. # Trainingsdaten (Inputs für das XOR-Problem und andere)
  12. inputs = [[0, 0], [0, 1], [1, 0], [1, 1]]
  13.  
  14. # Alle möglichen Zieltabellen (16 Kombinationen)
  15. all_possible_targets = list(product([0, 1], repeat=4))
  16.  
  17. # Trainingsloop für jede mögliche Zieltabelle
  18. for table_index, targets in enumerate(all_possible_targets, start=1):
  19. print(f"\n=== Wahrheitstabelle {table_index}: Targets = {targets} ===")
  20.  
  21. # Trainingsloop mit max. 1000 Iterationen
  22. max_iterations = 1000
  23. epoch = 0
  24. network_trained = False
  25. start_weights = None
  26. final_weights = None
  27. final_bias = None
  28. all_epoch_outputs = [] # Store outputs of all epochs for debugging and transparency
  29.  
  30. while epoch < max_iterations:
  31. epoch += 1
  32. all_correct = True # Flag, um zu überprüfen, ob alle Ausgaben korrekt sind
  33. current_weights = np.abs(np.random.rand(2)) # Zufällige Startgewichte (nur positive Werte)
  34. bias = np.random.rand() # Randomly initialize the bias term for this epoch
  35.  
  36. if epoch == 1: # Die erste Iteration nach Initialisierung
  37. start_weights = current_weights # Speichere die Startgewichte
  38.  
  39. epoch_outputs = [] # To store outputs of this epoch
  40.  
  41. for input_vector, target in zip(inputs, targets):
  42. # Berechnung der gewichteten Summe mit Bias
  43. weighted_sum = np.dot(input_vector, current_weights) + bias
  44.  
  45. # Aktivierungsfunktion (einfache Schwellenwertfunktion)
  46. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  47.  
  48. # Fehlerberechnung
  49. error = target - output
  50.  
  51. # Wenn ein Fehler vorliegt, dann weise die Gewichte an
  52. if error != 0:
  53. all_correct = False
  54. # Update weights and ensure they remain non-negative
  55. current_weights += learning_rate * error * np.array(input_vector)
  56. current_weights = np.maximum(current_weights, 0) # Ensure non-negativity
  57. bias += learning_rate * error # Update the bias
  58.  
  59. epoch_outputs.append((input_vector, output, target)) # Save each iteration's output
  60.  
  61. all_epoch_outputs.append(epoch_outputs)
  62.  
  63. # Print outputs for the first 3 iterations
  64. if epoch <= 3:
  65. print(f"\nEpoch {epoch}:")
  66. for input_vector, output, target in epoch_outputs:
  67. print(f" Input: {input_vector}, Output: {output}, Target: {target}")
  68.  
  69. # Überprüfe, ob alle Ausgaben korrekt sind
  70. if all_correct:
  71. network_trained = True
  72. final_weights = current_weights # Speichere die finalen Gewichte
  73. final_bias = bias # Speichere die finale Bias
  74. break # Stoppe, wenn alle Ausgaben korrekt sind
  75.  
  76. # Wenn Tabelle nach 100 Iterationen nicht gelernt wurde, setze neue zufällige Startgewichte
  77. if epoch % 100 == 0:
  78. print(f"Nicht funktionierende Startgewichte: {start_weights}")
  79. start_weights = np.abs(np.random.rand(2)) # Setze neue Startgewichte (nur positive Werte)
  80.  
  81. # Print the final result
  82. if network_trained:
  83. print(f"\nDas Netzwerk hat Wahrheitstabelle {table_index} korrekt nach {epoch} Iterationen gelernt.")
  84. print(f"Die Working Startgewichte waren: {start_weights}")
  85. print(f"Die finalen Gewichte sind: {final_weights}")
  86. print(f"Der finale Bias ist: {final_bias}")
  87.  
  88. # Testen des Netzwerks nach den Lern-Iterationen
  89. print("\nFinal Test Output:")
  90. for input_vector, target in zip(inputs, targets):
  91. weighted_sum = np.dot(input_vector, final_weights) + final_bias
  92. output = 1 if lower_threshold < weighted_sum < upper_threshold else 0
  93. print(f"Input: {input_vector}, Target: {target}, Output: {output}")
  94. else:
  95. print(f"\nDas Netzwerk hat Wahrheitstabelle {table_index} nach {epoch} Iterationen nicht korrekt gelernt.")
  96.  
Success #stdin #stdout 0.38s 29096KB
stdin
Standard input is empty
stdout
=== Wahrheitstabelle 1: Targets = (0, 0, 0, 0) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 0

Das Netzwerk hat Wahrheitstabelle 1 korrekt nach 1 Iterationen gelernt.
Die Working Startgewichte waren: [0.02286285 0.91274459]
Die finalen Gewichte sind: [0.02286285 0.91274459]
Der finale Bias ist: 0.4003916732159578

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

=== Wahrheitstabelle 2: Targets = (0, 0, 0, 1) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Epoch 2:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Epoch 3:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Das Netzwerk hat Wahrheitstabelle 2 korrekt nach 15 Iterationen gelernt.
Die Working Startgewichte waren: [0.11118641 0.89283161]
Die finalen Gewichte sind: [0.10578966 0.56062588]
Der finale Bias ist: 0.2369062906039313

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

=== Wahrheitstabelle 3: Targets = (0, 0, 1, 0) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 1, Target: 0
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Epoch 2:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 1, Target: 0
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Epoch 3:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 1, Target: 0

Das Netzwerk hat Wahrheitstabelle 3 korrekt nach 13 Iterationen gelernt.
Die Working Startgewichte waren: [0.67786197 0.20138179]
Die finalen Gewichte sind: [0.39926328 0.9443132 ]
Der finale Bias ist: 0.4993377184278106

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

=== Wahrheitstabelle 4: Targets = (0, 0, 1, 1) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 1

Epoch 2:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 1

Epoch 3:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 1, Target: 0
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 1, Target: 1

Das Netzwerk hat Wahrheitstabelle 4 korrekt nach 8 Iterationen gelernt.
Die Working Startgewichte waren: [0.10976064 0.56768499]
Die finalen Gewichte sind: [0.69937875 0.04500128]
Der finale Bias ist: 0.3130465274924349

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

=== Wahrheitstabelle 5: Targets = (0, 1, 0, 0) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 1, Target: 0

Epoch 2:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 0

Das Netzwerk hat Wahrheitstabelle 5 korrekt nach 2 Iterationen gelernt.
Die Working Startgewichte waren: [0.47150683 0.19687143]
Die finalen Gewichte sind: [0.74738927 0.69543457]
Der finale Bias ist: 0.4875359187229168

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

=== Wahrheitstabelle 6: Targets = (0, 1, 0, 1) ===

Epoch 1:
  Input: [0, 0], Output: 1, Target: 0
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Epoch 2:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Epoch 3:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 1, Target: 1

Das Netzwerk hat Wahrheitstabelle 6 korrekt nach 31 Iterationen gelernt.
Die Working Startgewichte waren: [0.92537194 0.29566317]
Die finalen Gewichte sind: [0.14672957 0.92728826]
Der finale Bias ist: 0.05406607513637396

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

=== Wahrheitstabelle 7: Targets = (0, 1, 1, 0) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Epoch 2:
  Input: [0, 0], Output: 1, Target: 0
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Epoch 3:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Das Netzwerk hat Wahrheitstabelle 7 korrekt nach 6 Iterationen gelernt.
Die Working Startgewichte waren: [0.64339602 0.34526467]
Die finalen Gewichte sind: [0.45923636 0.33064948]
Der finale Bias ist: 0.5796531406358342

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

=== Wahrheitstabelle 8: Targets = (0, 1, 1, 1) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 1

Epoch 2:
  Input: [0, 0], Output: 1, Target: 0
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 1

Epoch 3:
  Input: [0, 0], Output: 0, Target: 0
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 1
Nicht funktionierende Startgewichte: [0.00759954 0.86659181]

Das Netzwerk hat Wahrheitstabelle 8 korrekt nach 132 Iterationen gelernt.
Die Working Startgewichte waren: [0.46491305 0.49437297]
Die finalen Gewichte sind: [0.21133729 0.05102032]
Der finale Bias ist: 0.7759904545140672

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: 1, Output: 1

=== Wahrheitstabelle 9: Targets = (1, 0, 0, 0) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 0
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 1, Target: 0

Epoch 2:
  Input: [0, 0], Output: 1, Target: 1
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 0, Target: 0

Epoch 3:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 1, Target: 0

Das Netzwerk hat Wahrheitstabelle 9 korrekt nach 4 Iterationen gelernt.
Die Working Startgewichte waren: [0.3085187  0.13315906]
Die finalen Gewichte sind: [0.53302668 0.42112005]
Der finale Bias ist: 0.826808705943355

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

=== Wahrheitstabelle 10: Targets = (1, 0, 0, 1) ===

Epoch 1:
  Input: [0, 0], Output: 1, Target: 1
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Epoch 2:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 0
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Epoch 3:
  Input: [0, 0], Output: 1, Target: 1
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 0, Target: 1
Nicht funktionierende Startgewichte: [1.04413304 0.8510247 ]
Nicht funktionierende Startgewichte: [0.72648777 0.34934315]
Nicht funktionierende Startgewichte: [0.26261339 0.21097693]
Nicht funktionierende Startgewichte: [0.49587147 0.58415056]
Nicht funktionierende Startgewichte: [0.97219422 0.34791175]
Nicht funktionierende Startgewichte: [0.59621419 0.2460932 ]
Nicht funktionierende Startgewichte: [0.25087174 0.01757132]
Nicht funktionierende Startgewichte: [0.41504977 0.78380925]
Nicht funktionierende Startgewichte: [0.6964752  0.42385502]
Nicht funktionierende Startgewichte: [0.54031728 0.63066143]

Das Netzwerk hat Wahrheitstabelle 10 nach 1000 Iterationen nicht korrekt gelernt.

=== Wahrheitstabelle 11: Targets = (1, 0, 1, 0) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 0
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Epoch 2:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 0
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Epoch 3:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Das Netzwerk hat Wahrheitstabelle 11 korrekt nach 19 Iterationen gelernt.
Die Working Startgewichte waren: [0.60660851 0.05700594]
Die finalen Gewichte sind: [0.11823242 0.93160365]
Der finale Bias ist: 0.9210632048035048

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

=== Wahrheitstabelle 12: Targets = (1, 0, 1, 1) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 1

Epoch 2:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 0
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 1, Target: 1

Epoch 3:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 0
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 1
Nicht funktionierende Startgewichte: [0.61117478 0.92520137]
Nicht funktionierende Startgewichte: [0.91608556 0.91823071]
Nicht funktionierende Startgewichte: [0.69324556 0.64174343]
Nicht funktionierende Startgewichte: [0.73286709 0.90657261]
Nicht funktionierende Startgewichte: [0.32633631 0.40644066]
Nicht funktionierende Startgewichte: [0.25098533 0.93398525]
Nicht funktionierende Startgewichte: [0.48979883 0.26392375]
Nicht funktionierende Startgewichte: [0.82895958 0.21991268]
Nicht funktionierende Startgewichte: [0.49168843 0.59482049]
Nicht funktionierende Startgewichte: [0.82405288 0.00254146]

Das Netzwerk hat Wahrheitstabelle 12 nach 1000 Iterationen nicht korrekt gelernt.

=== Wahrheitstabelle 13: Targets = (1, 1, 0, 0) ===

Epoch 1:
  Input: [0, 0], Output: 1, Target: 1
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 0

Epoch 2:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 1, Target: 0

Epoch 3:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 0

Das Netzwerk hat Wahrheitstabelle 13 korrekt nach 18 Iterationen gelernt.
Die Working Startgewichte waren: [0.51919323 0.84360118]
Die finalen Gewichte sind: [0.61187384 0.278432  ]
Der finale Bias ist: 0.8467440095787175

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

=== Wahrheitstabelle 14: Targets = (1, 1, 0, 1) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Epoch 2:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 0, Target: 0
  Input: [1, 1], Output: 0, Target: 1

Epoch 3:
  Input: [0, 0], Output: 1, Target: 1
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 1, Target: 0
  Input: [1, 1], Output: 1, Target: 1
Nicht funktionierende Startgewichte: [0.78123507 0.56935223]
Nicht funktionierende Startgewichte: [0.16405041 0.80984145]
Nicht funktionierende Startgewichte: [0.58150184 0.76647046]
Nicht funktionierende Startgewichte: [0.10653271 0.38529067]
Nicht funktionierende Startgewichte: [0.47380421 0.06637962]
Nicht funktionierende Startgewichte: [0.83766264 0.19205765]
Nicht funktionierende Startgewichte: [0.76036182 0.34076203]
Nicht funktionierende Startgewichte: [0.66834706 0.63658707]
Nicht funktionierende Startgewichte: [0.02095098 0.76566191]
Nicht funktionierende Startgewichte: [0.51205896 0.04209681]

Das Netzwerk hat Wahrheitstabelle 14 nach 1000 Iterationen nicht korrekt gelernt.

=== Wahrheitstabelle 15: Targets = (1, 1, 1, 0) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Epoch 2:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 0

Epoch 3:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 0
Nicht funktionierende Startgewichte: [0.33589865 0.53804178]
Nicht funktionierende Startgewichte: [0.88897427 0.85694149]
Nicht funktionierende Startgewichte: [0.37437958 0.33208309]

Das Netzwerk hat Wahrheitstabelle 15 korrekt nach 309 Iterationen gelernt.
Die Working Startgewichte waren: [0.29984528 0.96990677]
Die finalen Gewichte sind: [0.21014685 0.21158224]
Der finale Bias ist: 0.9221495929676305

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

=== Wahrheitstabelle 16: Targets = (1, 1, 1, 1) ===

Epoch 1:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 1

Epoch 2:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 0, Target: 1
  Input: [1, 0], Output: 1, Target: 1
  Input: [1, 1], Output: 0, Target: 1

Epoch 3:
  Input: [0, 0], Output: 0, Target: 1
  Input: [0, 1], Output: 1, Target: 1
  Input: [1, 0], Output: 0, Target: 1
  Input: [1, 1], Output: 0, Target: 1

Das Netzwerk hat Wahrheitstabelle 16 korrekt nach 45 Iterationen gelernt.
Die Working Startgewichte waren: [0.26055427 0.80528883]
Die finalen Gewichte sind: [0.10677096 0.07029004]
Der finale Bias ist: 0.9503828839592108

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