Sieć neuronowa - pojedyńczy neruon ze sprzężeniem zwrotnym
import numpy as np
import matplotlib.pyplot as plt
# Funkcja aktywacji - sigmoida i jej pochodna
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
# Dane uczące (AND logiczne)
X = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1]
])
y = np.array([[0], [0], [0], [1]]) # AND: tylko 1,1 → 1
# Inicjalizacja wag
np.random.seed(0)
weights = 2 * np.random.rand(2, 1) - 1
bias = 0.5 # Bias może być również trenowany – tu trzymamy stały dla prostoty
# Parametry uczenia
epochs = 10000
learning_rate = 0.1
errors = []
# Trening
for epoch in range(epochs):
# Propagacja w przód
inputs = X
z = np.dot(inputs, weights) + bias
output = sigmoid(z)
# Oblicz błąd
error = y - output
errors.append(np.mean(np.abs(error)))
# Oblicz korektę
adjustments = error * sigmoid_derivative(output)
# Aktualizacja wag
weights += learning_rate * np.dot(inputs.T, adjustments)
# Wyniki
print("Wyuczone wagi:")
print(weights)
print("Wyniki dla danych uczących:")
print(output)
# Wykres błędu
plt.plot(errors)
plt.title("Błąd średni w czasie uczenia")
plt.xlabel("Epoka")
plt.ylabel("Średni błąd")
plt.grid(True)
plt.show()