CNN의 층별 연산과 Tensor shape
인공지능응용 · 9주차
이번 주 목표 · 각 층이 채널 수와 공간 크기를 어떻게 바꾸는지 계산합니다.
실행: Colab에서 내 Drive에 사본을 저장한 뒤 Code Cell의 ▶ 또는 Shift+Enter로 위에서부터 실행하세요. ⟦직접 입력⟧ 표시가 있는 Text Cell은 더블클릭해서 수정합니다.
Filter 계산부터 Layer의 역할까지
Convolution은 입력의 좁은 영역과 Filter의 같은 위치 값을 곱해 더합니다. 예를 들어 입력 Patch [[1,2],[3,4]]와 Filter [[1,0],[0,-1]]의 결과 한 칸은 −3입니다. 같은 Filter를 이동해 Feature Map을 만들며 Filter 값은 학습됩니다. ReLU는 음수를 0으로 만들고, MaxPool은 영역의 최댓값을 남깁니다. 이번 실습에서는 각 계산을 거친 뒤 이미지의 가로·세로 크기와 채널 수가 어떻게 바뀌는지 확인합니다.
1. 이미지에도 축의 순서가 있다
PyTorch의 2차원 Convolution 입력은 보통 (N,C,H,W)입니다. (8,1,28,28)은 흑백 이미지 여덟 장이지 8채널 이미지 한 장이 아닙니다. 층을 만들기 전에 각 숫자의 의미를 적으세요.
이미지에도 축의 순서가 있다
Convolution은 작은 필터를 여러 위치에 적용하며 같은 파라미터를 공유합니다. 출력 채널 수는 학습할 필터의 수와 연결되고 입력 이미지 수와는 독립적입니다.
2. Convolution과 pooling의 크기 계산
dilation=1일 때 출력 길이는 입니다. kernel=3, padding=1, stride=1이면 공간 크기가 유지됩니다. 2×2 pooling은 공간 정보를 요약합니다.
Convolution과 pooling의 크기 계산
이번 구조의 마지막 pooling은 padding=1입니다. 7에서 4로 바뀌는 이유를 식에 직접 대입해 확인하세요. 채널은 1→32→64→128로 늘지만 공간 크기는 28→14→7→4로 줄어듭니다.
3. Flatten에서도 Batch는 보존
(N,128,4,4)는 flatten(start_dim=1)로 (N,2048)이 됩니다. 그다음 Linear(2048,625), 마지막 Linear(625,10)으로 연결합니다. Batch 축까지 합치면 표본들이 섞이므로 주의하세요.
Flatten에서도 Batch는 보존
이번 주에는 입력 이미지가 각 Layer를 거치면서 어떤 크기의 배열로 바뀌는지 확인합니다. 무작위 입력의 출력값은 의미 있는 분류 결과가 아니며, 아직 학습하지 않은 모델의 구조 검증용입니다.
4. 이미지 몇 장으로 각 층의 출력 확인하기
각 층의 shape를 한 줄씩 출력하고 예상과 처음 달라지는 지점을 찾습니다. Batch 크기 1·8·32에서 출력이 각각 (N,10)인지 확인하세요. 모델 parameter 수는 Batch 크기를 바꿔도 같아야 합니다.
이미지 몇 장으로 각 층의 출력 확인하기
Dropout은 train 모드에서 일부 값을 무작위로 0으로 바꿉니다. eval 모드에서는 이 생략 동작을 멈추고 입력값을 그대로 통과시킵니다. shape 검사와 재현 가능한 출력 비교를 할 때 모드를 명확히 설정하세요.
학습 내용 확인
- 코드에 넣을 값은 무엇이며, 결과 배열의 각 행·열은 무엇을 뜻하나요? 물리량을 계산한다면 단위도 확인했나요?
- 조건을 하나 바꿨을 때 다시 실행해야 하는 부분을 찾을 수 있나요?
- 실행 결과가 예상과 맞나요? 다르다면 출력값이나 그래프를 보고 이유를 설명할 수 있나요?
실습 자료
- AI_Applications_Week09_Convolution.ipynbColab 노트북 미리보기 · Colab 노트북 다운로드
- L16_Convolutional_Neural_Network.ipynbColab 노트북 미리보기 · Colab 노트북 다운로드