지난 포스팅의 확장입니다. 실제 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)
이걸로 끝일까요? 절대 아니겠죠? ㅋㅋ 다음 포스팅에서 더 자세한 설명 추가됩니다.
'Have Done > MLP' 카테고리의 다른 글
MLP from Scratch with Numpy [5 / 7] - backpropagation1 (0) | 2022.01.06 |
---|---|
MLP from Scratch with Numpy [4 / 7] - feed forward 코딩 흐름 (0) | 2022.01.05 |
MLP from Scratch with Numpy [3 / 7] - Activation (0) | 2022.01.04 |
MLP from Scratch with Numpy [1 / 7] - feed forward1 (0) | 2022.01.03 |
MLP from Scratch with Numpy [0 / 7] - Classification 사전작업 (0) | 2022.01.03 |
댓글