본문 바로가기
Have Done/MLP

MLP from Scratch with Numpy [2 / 7] - feed forward2

by 에아오요이가야 2022. 1. 3.

지난 포스팅의 확장입니다. 실제 MNIST 데이터에 적용하기

 

MNIST 데이터의 크기는 [28 x 28]의 이미지라고 말씀드렸어 이걸 한 줄로 죽 늘어뜨리면 [1 x 784] vector로 표현할 수 있습니다.

 

그럼 지난 포스팅에서 봤던 input layer \( I \)의 크기는 어떻게 될까요?  [1 x 784] vector가 바로 input layer \(I\)로 표현됩니다~

 

그다음은 Hidden layer \( H \)의 크기는 어떻게 정할까요? 사실 맘대로 하면 됩니다.

 

크게 하면 연산량이 많아지며 복잡한 문제를 해결할 수 있는 가능성이 생기고요

 

작게 하면 그 반대입니다 Vise Versa.

 

저는 그냥 [1 x 100] 사이즈의 vector로 만들어 주겠습니다.

 

마지막으로 output layer \(O\)의 사이즈는 뭘까요 MNIST 데이터가 0~9으로 이뤄진 10개 클래스로 구분돼있기 때문에 output layer \(O\)는 [1 x 10] 사이즈의 vector가 됩니다.

 

그럼 순서대로 [1 x 784], [1 x 100], [1 x 10]의 vector들로 layer들이 결정됐으니

 

그 사이에 들어갈 행렬 \(W^0, W^1\)을 잡아주면 되겠습니다.

 

\(W^0\) 의 사이즈는 뭘까요? [784 x 100]이고요

 

\(W^1\) 의 사이즈는 뭘까요? [100 x 10]입니다. 간단하죠? 

 

자 그렇게 정해진 사이즈로 초기화를 먼저 해보겠습니다~!

 

W_0 = np.random.rand(784,100)
W_1 = np.random.rand(100,10)

 

이제 계산을 해봐야겠죠?!

 

Hidden layer \(H\)는 input layer \(I \times W^0\)  이고

 

Output layer \(O\)는 Hidden layer \(H \times W^1\)  입니다

 

결국

 

Output layer \(O = H \times  W^1 = I \times W^0 \times W^1 \)가 되겠네요

 

사이즈는 [1 x 784] x [784 x 100] x [100 x 10] = [1 x 10]으로 결정되겠습니다.

 

Hidden_layer = np.dot(Input_layer ,  W_0)
Output_layer = np.dot(Hidden_layer , W_1)

Output_layer = np.dot(np.dot(Input_layer ,  W_0) , W_1)

이걸로 끝일까요? 절대 아니겠죠? ㅋㅋ 다음 포스팅에서 더 자세한 설명 추가됩니다.

댓글