멀티 레이어 퍼셉트론
import numpy as np
import math as m
def sigmoid(x):
return (1.0 / (1 + m.exp(-x)))
lrate = 0.02
INDIM = 7 #(바이어스까지 해서 7개)
H1DIM = 5
OUTDIM = 3
PTTN_NUM = 3 #(학습시키는 개수)
x = np.array([[1.0, 1.0, 1.0, 1.0, 0.1, 0.1, 0.1], # T-1 111000
[1.0, 0.1, 0.1, 1.0, 1.0, 1.0, 0.1], # T-2 000110
[1.0, 0.1, 0.1, 0.1, 1.0, 1.0, 1.0], # T-3 000111
])
t = np.array([[1.0, 0.0, 0.0], #100
[0.0, 1.0, 0.0], #010
[0.0, 0.0, 1.0], #001
])
#test_pattern
xt = np.array([[1.0, 0.1, 1.0, 0.1, 1.0, 0.1, 1.0], # T-1 010101
[1.0, 1.0, 0.1, 1.0, 0.1, 1.0, 0.1], # T-2 101010
])
w1 = np.zeros([H1DIM, INDIM])
for i in range(H1DIM):
for j in range(INDIM):
w1[i][j] = np.random.rand() / 10.0
w2 = np.zeros([OUTDIM, H1DIM])
for i in range(OUTDIM):
for j in range(H1DIM):
w2[i][j] = np.random.rand() / 10.0
print(w1)
print(w2)
y1 = np.zeros(H1DIM)
y2 = np.zeros(OUTDIM)
d1 = np.zeros(H1DIM)
d2 = np.zeros(OUTDIM)
for epoch in range(100000):
if (epoch % 1000) == 0:
print("epoch", epoch)
for p in range(PTTN_NUM):
###########################################
# feed forwarding
###########################################
# LAYER-1 (Hidden Layer)
for i in range(H1DIM):
out = 0.0
for j in range(INDIM):
out += w1[i][j] * x[p][j]
y1[i] = sigmoid(out)
# LAYER-2 (Output Layer)
# y1[0] = 1.0 ### bias
for i in range(OUTDIM):
out = 0.0
for j in range(H1DIM):
out += w2[i][j] * y1[j]
y2[i] = sigmoid(out)
###########################################
# Back Propagation
###########################################
# delta(error) for Layer-2 (Output Layer)
for i in range(OUTDIM):
d2[i] = (t[p][i] - y2[i]) * (y2[i] * (1 - y2[i]))
# delta(error) for Layer-1 (Hidden Layer)
for i in range(H1DIM):
for j in range(OUTDIM):
d1[i] = d2[j] * w2[j][i] * (y1[i] * (1 - y1[i]))
###########################################
# Weight Adjustment
###########################################
# for Layer-2 (Output Layer)
for i in range(OUTDIM):
for j in range(H1DIM):
w2[i][j] += lrate * d2[i] * y1[j]
# for Layer-1 (Hidden Layer)
for i in range(H1DIM):
for j in range(INDIM):
w1[i][j] += lrate * d1[i] * x[p][j]
if (epoch % 1000) == 0:
print("pattern number[%d] : " % p)
print("target : ", "%7.2f" % t[p][0], "%7.2f" % t[p][1], "%7.2f" % t[p][2]) #타겟
print("output : ", "%7.2f" % y2[0], "%7.2f" % y2[1], "%7.2f" % y2[2]) #출력
#########################################################
# Evaluation
PLOT_SIZE = 21
px = np.zeros(PLOT_SIZE)
py = np.zeros(PLOT_SIZE)
for k in range(PLOT_SIZE):
# feed forwarding
# LAYER-1 (Hidden Layer)
x[0][1] = k / (PLOT_SIZE - 1)
for i in range(H1DIM):
out = 0.0
for j in range(INDIM):
out += w1[i][j] * x[0][j]
y1[i] = sigmoid(out)
# LAYER-2 (Output Layer)
out = 0.0
for i in range(H1DIM):
out += w2[i] * y1[i]
y2 = sigmoid(out)
print("%7.2f" % x[0][1], "%7.2f" % y2)
px[k] = x[0][1]
py[k] = y2
다음주까지 중간고사 5번 문제 t, c, e 로 해오기
target
T 25개 비트 1 0 0
C 25개 비트 0 1 0
E 25개 비트 0 0 1
'학교 > 인공지능' 카테고리의 다른 글
17번째 수업(0509) (0) | 2024.05.09 |
---|---|
16번째 수업(0508) (0) | 2024.05.08 |
14번째 수업(0501) (1) | 2024.05.01 |
13번째 수업(0425) - 중간고사 이후(시험 오답노트) (0) | 2024.04.25 |
12번째 수업(0418) (0) | 2024.04.18 |