모델의 각 레이어마다 shape이 맞는지 확인하기 위해 '변수.shape'을 사용하곤 한다.
그 출력의 의미를 알아보자.
print(x.shape)을 보면 아래와 같은 출력을 확인할 수 있다.

x는 입력이기 때문에 [배치사이즈, rgb채널, 높이, 너비] 로 쓴다.
즉, [32, 3, 224, 224] → 배치사이즈는 32로 rgb는 채널이 3이니까 3, 이미지 사이즈는 224*224
이렇게 된다.
다음 레이어를 보면 [32, 64, 112, 112]이다.
입력과 마찬가지로 배치사이즈는 32이고
64는 필터의 수다. 나는 아래와 같이 레이어를 쌓았다.
self.conv = nn.Conv2d(3, 64, 7, padding=3, stride=2)
self.pool = nn.MaxPool2d(3,2,1)
self.conv1 = nn.Conv2d(64, 64, 3, padding=1)
112*112도 마찬가지로 사이즈를 의미한다. 112*112로 줄어든 이유는 7×7 필터와 컨볼루션을 했기 때문이다.
그렇다면 총 픽셀의 수는 몇 개일까?
배치사이즈를 제외하고 필터의 수, 높이와 너비로 알 수 있다.
계산하기 쉽게 3×3 컨볼루션으로 예를 들어보자.
3×3 크기의 픽셀 수는 몇 개? 9개다. 3 곱하기 3이니까.
그렇다면 3×3 크기 rgb 채널이라면 픽셀 수는 몇 개일까?

rgb의 채널은 3이므로 9개의 픽셀이 3배가 더 추가되는 것이다.

(3, 3, 3)에서 픽셀의 수. 즉, feature는 3×3×3 이 된다.
그러면 위의 예시 [32, 3, 224, 224] 이 픽셀의 수도 구할 수 있다.
3*(224*224) = 150,528개가 된다.
'Study' 카테고리의 다른 글
| Adaptive filter (0) | 2024.06.12 |
|---|---|
| SGD Algorithm (0) | 2024.06.11 |
| LMS와 SGD 차이점 (0) | 2024.06.11 |
| LMS Algorithm (0) | 2024.05.21 |
| 파라미터 수 계산하기 (0) | 2024.05.11 |