Praktikum 1
import numpy as np
# Dataset XOR
X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([[0],[1],[1],[0]])
# Parameter
input_size = 2
hidden_size = 2
output_size = 1
lr = 0.1
# Inisialisasi bobot
W1 = np.random.randn(input_size, hidden_size)
b1 = np.zeros((1, hidden_size))
W2 = np.random.randn(hidden_size, output_size)
b2 = np.zeros((1, output_size))
# Fungsi aktivasi
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
# Training
for epoch in range(10000):
# Forward pass
z1 = np.dot(X, W1) + b1
a1 = sigmoid(z1)
z2 = np.dot(a1, W2) + b2
a2 = sigmoid(z2)
# Hitung error
error = y - a2
# Backpropagation
d_a2 = error * sigmoid_derivative(a2)
d_W2 = np.dot(a1.T, d_a2)
d_b2 = np.sum(d_a2, axis=0, keepdims=True)
d_a1 = np.dot(d_a2, W2.T) * sigmoid_derivative(a1)
d_W1 = np.dot(X.T, d_a1)
d_b1 = np.sum(d_a1, axis=0, keepdims=True)
# Update bobot
W1 += lr * d_W1
b1 += lr * d_b1
W2 += lr * d_W2
b2 += lr * d_b2
if epoch % 1000 == 0:
loss = np.mean(np.square(error))
print(f"Epoch {epoch}, Loss: {loss}")
# Output akhir
print("Prediksi:")
print(a2)Last updated