import numpy as np
# Input dataset (XOR problem)
X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([[0],[1],[1],[0]])
np.random.seed(1)
input_neurons, hidden_neurons, output_neurons = 2, 4, 1
W1 = np.random.uniform(size=(input_neurons, hidden_neurons))
b1 = np.random.uniform(size=(1, hidden_neurons))
W2 = np.random.uniform(size=(hidden_neurons, output_neurons))
b2 = np.random.uniform(size=(1, output_neurons))
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
lr = 0.5
epochs = 10000
for epoch in range(epochs):
# Forward pass
hidden_input = np.dot(X, W1) + b1
hidden_output = sigmoid(hidden_input)
final_input = np.dot(hidden_output, W2) + b2
predicted_output = sigmoid(final_input)
# Backpropagation
error = y - predicted_output
d_output = error * sigmoid_derivative(predicted_output)
error_hidden = d_output.dot(W2.T)
d_hidden = error_hidden * sigmoid_derivative(hidden_output)
W2 += hidden_output.T.dot(d_output) * lr
b2 += np.sum(d_output, axis=0, keepdims=True) * lr
W1 += X.T.dot(d_hidden) * lr
b1 += np.sum(d_hidden, axis=0, keepdims=True) * lr
if epoch % 2000 == 0:
loss = np.mean(np.square(error))
print(f"Epoch {epoch}, Loss: {loss:.4f}")
print("Final predicted output:")
print(predicted_output)⚠️Content was pasted as plain text and auto-formatted as a code block. Use the Code Block button in the editor for proper formatting.