개발아 담하자

[Deep Learning] Neural Network 의 Forward Pass 구현해보기 (1) - 초기 네트워크 세팅 본문

🚀 Deep Learning

[Deep Learning] Neural Network 의 Forward Pass 구현해보기 (1) - 초기 네트워크 세팅

choidam 2020. 4. 22. 02:17

1. 단순 신경망 구조 만들기 (네트워크 세팅)

단순 신경망 구조

 

def init_network():
    network = {}
    network['W'] = np.array([
        [0.2, 0.5, 0.3],
        [0.8, 0.6, 0.4]
    ])
    return network

network = init_network()

print(network)
{'W': array([[0.2, 0.5, 0.3],
       [0.8, 0.6, 0.4]])}

 

init_network() 함수로 초기 네트워크 세팅을 해주었다.

 

 

2. ForwardPass 만들기

# forward pass 1
def forward1(network, x):
    W = network['W']
    y = np.array([0.0, 0.0, 0.0])
    y[0] = W[0][0] * x[0] + W[1][0] * x[1]
    y[1] = W[0][1] * x[0] + W[1][1] * x[1]
    y[2] = W[0][2] * x[0] + W[1][2] * x[1]
    return y


# forward pass 2
def forward2(network,x):
    y = np.dot(x, network['W'])
    return y

# sigmoid : 출력값을 0~1로 조정
def sigmoid(x):
    return 1 / ( 1 + np.exp(-x) )

# forward + sigmoid (Active Function 적용)
def forward3(network,x):
    y = sigmoid(np.dot(x, network['W']))
    return y

print(forward2(network, np.array([1.0, 2.0])))
print(forward3(network, np.array([1.0, 2.0])))
[1.8 1.7 1.1]
[0.85814894 0.84553473 0.75026011]

forward2 numpy 를 사용해 forward1 계산을 한 번에 한 형태이다. (행렬의 곱셈)
forward3 sigmoid 함수를 적용해 forward 값을 0~1사이로 적용한 형태이다. 출력값으로 확인할 수 있다.

 

 

3. Softmax Function

def softmax(x)  :
    e = np.exp(x - np.max(x))
    s = np.sum(e)
    return e / s

일반적으로 Neural Network 기반 multi-label classifier 의 마지막 층에서 사용한다.
출력값이 0부터 1사이의 값이다. 출력의 합계는 1이다.

 

 

이제 이 함수들을 활용해 이미지를 학습시키고 분류를 시작할 준비가 되었다 ❗️

 

 

+ 추가 

Loss Function

지금 예측이 얼마나 좋은지 알 수 있는 함수. 0에 가까울 수록 학습이 잘 된 모델이다.

 

1. MSE (Mean Squared Error)

선형 회귀는 적절한 가중치 (w) 와 편향(b) 를 찾기 위해  평균 제곱 오차(MSE) 를 최소화하는 파라미터 w 와 b 를 찾는다.
실제 라벨값과 예측값의 차이가 작으면 작을 수록 예측 성능이 좋기 때문이다.

def mean_squared_error(y,t):
    return np.mean((y-t)**2)

 

2. CSE (Cross Entropy Error)

def cross_entropy_error(y,t):
    return -np.sum(t * np.log(y + 1e-9)) / y.shape[0]

softmax 를 사용했을 때 (분류 했을 때) 주로 사용한다.