본문 바로가기
인공지능

데이타 사이즈 흐름 추적해보기

by Falto 2021. 8. 23.

 

batch = 100

즉, 위 그림에서 손글씨 2와 같은 것들이 100개 동시 입력한다는 의미. 손글씨 하나 크기는 (28x28)
filter는 30개로 하고, 각 필터 크기는 (5x5)
pad=0, stride=1로 셋팅.

affine의 은닉층 노드수는 120. 출력층 노드수는 10개로 했음.
pooling은 2x2, stride = 2로 했음

* 첫번째 conv 출력 크기는 (100, 30, 24, 24) 
pad를 0으로 했기 때문에 28x28에서 24x24로 크기가 줄었음. pad 0으로 하면 크기가 반드시 줄어야 함.
필터 갯수가 30개이므로 100x30x24x24가 된 것임.

* 두번째 ReLU 출력 크기는 (100, 30, 24, 24) 
ReLU는 그냥 투명한 존재처럼 생각하면 됨.

* 세번째 Pooling 출력 크기는 (100, 30, 12, 12) 
확실하진 않지만, 2x2 with stride = 2로 하면 출력크기가 1/2로 줄어드는 것 같음. Pooling은 크기를 줄이는 게 목적이기 때문에 잘 동작함을 알 수 있음.

* 네번째 Affine 출력 크기는 (100, 120) 
여기가 이상할 수 있음. 4차원 행렬 넣었는데 출력은 2차원이 되었음.
def Affine을 보면 4차원을 2차원으로 만드는 부분이 있음.
그래서 내부적으론 이런 과정이 일어남.
x는 (100, 30, 12, 12) --> (100, 4320) 이렇게 변함. 
여기에다가 (4320,120) W2를 곱함 그러면 (100,120) 출력이 됨.

W2의 크기는 초기화에서 미리 결정해줘야 하는데, 위 공식처럼 되기 때문에 어렵지 않음.
즉, 행의 크기는 앞단 Pooling 출력을 1자로 늘여놓은 것임. 열크기는 은닉층 노드수

마지막 Affine에서 W3는 출력노드 수가 10이기 때문에 (100,10)이 됨.

알고 보면 별거 아님. 엄청 간단!

그럼 훈련시킨 뒤 실제 사용할 때 출력은 어디서 뽑을까? 
Softmax 앞단임. Softmax 층은 인공지능 훈련용이지 훈련한 후에는 쓸모없는 것임.

'인공지능' 카테고리의 다른 글

훈련시킨 후 테스트 해보기  (0) 2021.08.22
인공지능 '층' 용어정리  (0) 2021.08.20
CNN 코드 분석 1  (0) 2021.08.17
7.5 CNN 구현하기 (코드 짜기)  (0) 2021.08.14
7.5 CNN 구현하기  (0) 2021.08.13

댓글