728x90
반응형
편향과 활성화 함수를 생략하고 가중치만 갖는 신경망 구현
파이썬 코드
# 편향과 활성화 함수를 생략하고 가중치만 갖는 신경망
import numpy as np
x = np.array([1,2])
print(x.shape)
w = np.array([[1,3,5],[2,4,6]])
print(w)
print(w.shape)
y = np.dot(x,w)
print(y)
3층 신경망 구현
3층 신경망
입력층(0층)은 2개, 첫 번째 은닉층(1층) 3개, 두 번째 은닉층(2층) 2개, 출력층(3층) 2개의 뉴런으로 구성
표기법 설명
입력층에서 1층으로 신호 전달
편향을 뜻하는 뉴런 1이 추가되었다.
2층 첫 번째 뉴런의 식
행렬의 내적을 이용해 1층의 '가중치 부분' 간소화
파이썬 구현
# 3층 신경망
import numpy as np
x = np.array([1.0,0.5])
w1 = np.array([[0.1, 0.3, 0.5],[0.2, 0.4, 0.6]])
b1 = np.array([0.1,0.2,0.3])
print(w1.shape)
print(x.shape)
print(b1.shape)
A1 = np.dot(x,w1) + b1 # 구현 식
print(A)
입력층에서 1층으로의 신호 전달
은닉층에서의 가중치 합(가중 신호와 편향의 합)을 a로 표기하고 활성화 함수 h()로 변환된 신호를 z로 표기한다.
여기서 활성화 함수로 시그모이드 함수를 사용한다.
파이썬 코드
# 3층 신경망
import numpy as np
x = np.array([1.0,0.5])
w1 = np.array([[0.1, 0.3, 0.5],[0.2, 0.4, 0.6]])
b1 = np.array([0.1,0.2,0.3])
print(w1.shape)
print(x.shape)
print(b1.shape)
A1 = np.dot(x,w1) + b1 # 구현 식
print(A)
def sigmoid(x):
return 1/(1+np.exp(-x)) # 시그모이드 수식
z1 = sigmoid(A1)
print(A1)
print(z1)
이제 1층에서 2층의로의 신호 전달
파이썬 코드
# 3층 신경망
import numpy as np
x = np.array([1.0,0.5])
w1 = np.array([[0.1, 0.3, 0.5],[0.2, 0.4, 0.6]])
b1 = np.array([0.1,0.2,0.3])
print(w1.shape)
print(x.shape)
print(b1.shape)
A1 = np.dot(x,w1) + b1 # 구현 식
print(A)
def sigmoid(x):
return 1/(1+np.exp(-x)) # 시그모이드 수식
z1 = sigmoid(A1)
print(A1)
print(z1)
W2 = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
B2 = np.array([0.1,0.2])
print(z1.shape)
print(W2.shape)
print(B2.shape)
A2 = np.dot(z1,W2)+ B2
print(A2)
2층에서 출력층으로의 신호 전달
파이썬 코드
# 3층 신경망
import numpy as np
x = np.array([1.0,0.5])
w1 = np.array([[0.1, 0.3, 0.5],[0.2, 0.4, 0.6]])
b1 = np.array([0.1,0.2,0.3])
print(w1.shape)
print(x.shape)
print(b1.shape)
A1 = np.dot(x,w1) + b1 # 구현 식
print(A)
def sigmoid(x):
return 1/(1+np.exp(-x)) # 시그모이드 수식
z1 = sigmoid(A1)
print(A1)
print(z1)
W2 = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
B2 = np.array([0.1,0.2])
print(z1.shape)
print(W2.shape)
print(B2.shape)
A2 = np.dot(z1,W2)+ B2
Z2 = sigmoid(A2)
print(A2)
print(Z2)
def identity_function(x):
return x
W3 = np.array([[0.1,0.3],[0.2,0.4]])
B3 = np.array([0.1,0.2])
A3 = np.dot(Z2,W3)+B3
Y = identity_function(A3) # 혹은 Y = A3
print(Y)
구현 정리
파이썬 코드
import numpy as np
def sigmoid(x):
return 1/(1+np.exp(-x)) # 시그모이드 수식
def identity_function(x):
return x
def init_network():
network = {}
network['W1'] = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
network['b1'] = np.array([0.1,0.2,0.3])
network['W2'] = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
network['b2'] = np.array([0.1,0.2])
network['W3'] = np.array([[0.1,0.3],[0.2,0.4]])
network['b3'] = np.array([0.1,0.2])
return network
def forward(network,x):
W1, W2, W3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x,W1) + b1
z1 = sigmoid(a1)
a2 = np.dot(z1, W2) + b2
z2 = sigmoid(a2)
a3 = np.dot(z2, W3) + b3
y = identity_function(a3)
return y
network = init_network()
x = np.array([1.0,0.5])
y = forward(network, x)
print(y)
출처 : 밑바닥부터 시작하는 딥러닝
https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198
728x90
반응형
최근댓글