File size: 2,384 Bytes
0873620 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
import numpy as np
# ํ์ดํผํ๋ผ๋ฏธํฐ ์ค์
input_size = 2 # ์
๋ ฅ์ธต ๋
ธ๋ ์
hidden_size = 3 # ์๋์ธต ๋
ธ๋ ์
output_size = 1 # ์ถ๋ ฅ์ธต ๋
ธ๋ ์
learning_rate = 0.5 # ํ์ต๋ฅ
epochs = 10000 # ํ์ต ๋ฐ๋ณต ํ์
# 1. ๋ฐ์ดํฐ์
์ ์ (XOR ๋ฌธ์ )
# ์
๋ ฅ ๋ฐ์ดํฐ: [0,0], [0,1], [1,0], [1,1]
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
# ์ ๋ต ๋ ์ด๋ธ: [0], [1], [1], [0]
y = np.array([[0], [1], [1], [0]])
# 2. ๊ฐ์ค์น(W)์ ํธํฅ(b) ์ด๊ธฐํ
W1 = np.random.randn(input_size, hidden_size)
b1 = np.random.randn(hidden_size)
W2 = np.random.randn(hidden_size, output_size)
b2 = np.random.randn(output_size)
# 3. ํ์ฑํ ํจ์์ ๊ทธ ๋ฏธ๋ถ ํจ์ ์ ์
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
# 4. ํ์ต ์์
for epoch in range(epochs):
# ์์ ํ (Forward Propagation)
# ์๋์ธต
hidden_output = np.dot(X, W1) + b1
hidden_activation = sigmoid(hidden_output)
# ์ถ๋ ฅ์ธต
output_output = np.dot(hidden_activation, W2) + b2
predicted_output = sigmoid(output_output)
# ์ญ์ ํ (Backpropagation)
# 1๋จ๊ณ: ์ถ๋ ฅ์ธต์ ์ค์ฐจ์ ๊ธฐ์ธ๊ธฐ ๊ณ์ฐ
error_output = y - predicted_output
delta_output = error_output * sigmoid_derivative(predicted_output)
# 2๋จ๊ณ: ์๋์ธต์ ์ค์ฐจ์ ๊ธฐ์ธ๊ธฐ ๊ณ์ฐ
error_hidden = np.dot(delta_output, W2.T)
delta_hidden = error_hidden * sigmoid_derivative(hidden_activation)
# 3๋จ๊ณ: ๊ฐ์ค์น์ ํธํฅ ์
๋ฐ์ดํธ
W2 += np.dot(hidden_activation.T, delta_output) * learning_rate
b2 += np.sum(delta_output, axis=0) * learning_rate
W1 += np.dot(X.T, delta_hidden) * learning_rate
b1 += np.sum(delta_hidden, axis=0) * learning_rate
# ๋งค 1000๋ฒ์งธ epoch๋ง๋ค ์ค์ฐจ ์ถ๋ ฅ
if epoch % 1000 == 0:
loss = np.mean(np.abs(error_output))
print(f"Epoch: {epoch}, Loss: {loss:.4f}")
print("\n--- ํ์ต ์๋ฃ ---")
# 5. ํ์ต๋ ๋ชจ๋ธ๋ก ์์ธก (๊ฒฐ๊ณผ ํ์ธ)
hidden_output_final = np.dot(X, W1) + b1
hidden_activation_final = sigmoid(hidden_output_final)
predicted_final = sigmoid(np.dot(hidden_activation_final, W2) + b2)
print("์
๋ ฅ ๋ฐ์ดํฐ:\n", X)
print("์์ธก ๊ฒฐ๊ณผ:\n", predicted_final.round())
print("์ ๋ต ๋ ์ด๋ธ:\n", y) |