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()

    

	


:)