elevne's Study Note
딥러닝 파이토치 교과서 (4-1: CNN Conv2d, MaxPool2d 계산) 본문
저번 시간에 Conv2d, MaxPool2d 를 사용하며 행렬의 크기를 계산할 필요가 있었는데, 이를 하는 방법에 대해서 알아보았다.
저번 실습에서 사용한 Fashion MNIST 데이터는 28 * 28 의 Gray Scale 이미지데이터였다. 데이터를 우선 Conv2d 에 넣게된다. Conv2d 에 대해서 다시 복습해보자면 이는 input data 의 채널 크기 (RGB 면 3, Gray Scale 이면 1) , output data 의 크기 (필터를 몇 장 만들 것인지) , Kernel size, Padding, Stride (default = 1) 값을 받게된다. 결과 사이즈는 위 값들을 사용하여 계산하게 된다. 수식은 아래와 같다.
저번 예제의 경우로 생각해보았을 때, 처음에 28 * 28 의 이미지를 넣게되면 (( 28 + 2 * 1 - 3 ) / 1) + 1 로 28 이 결과 값으로 나오게된다. 이는 위에서 확인할 수 있듯이 number of output features 의 값으로 output 의 shape 이 28 * 28 이 된다고 생각하면 되는 것이다. 저번 시간에 사용했던 예제 코드의 경우 Conv2d 의 인자 중 out_channels 를 32 로 설정하였기에 (32, 28, 28) 의 shape 이 최종적으로 나오게 되는 것이다.
그 다음으로는 MaxPool2d 를 거친 후를 계산해야 한다. 이는 훨씬 간단하다. MaxPool2d 의 인자로 넣은 값을 image shape 에서 나누면 되는 것이다. 예제를 예로 들자면 Conv2d 로 거쳐서 나온 결과의 shape 이 28 * 28 이고 MaxPool2d 는 2 를 인자로 받는다. 이러한 경우에는 14 * 14 즉 결과는 (32, 14, 14) 의 shape 을 가지게 되는 것이다.
저번 실습에서는 이러한 과정을 한 번 더 반복하였다. 두 번째 Conv Layer 에서는 out_channels = 64, kernel_size = 3 으로 지정하였다. 이를 (32, 14, 14) 로 계산해보면 ((14 + 2 * 0 - 3) / 1) + 1 = 12 로, (64, 12, 12) 가 나오게 된다. 그 다음 MaxPool2d 에서는 또다시 2 를 인자로 주었기에 최종적으로 (64, 6, 6) 의 shape 을 가지게 되는 것이고 이를 view 로 flatten 하여 Fully Connected Layer 을 구성한 것이다.
Reference:
https://teddylee777.github.io/pytorch/conv2d-output-size-%EA%B3%84%EC%82%B0%EB%B2%95/2
'Machine Learning > Pytorch' 카테고리의 다른 글
딥러닝 파이토치 교과서 (4-2: CNN 전이학습(2)) (0) | 2023.03.12 |
---|---|
딥러닝 파이토치 교과서 (4-2: CNN 전이학습) (0) | 2023.03.11 |
딥러닝 파이토치 교과서 (4: 합성곱신경망 (2)) (0) | 2023.03.05 |
딥러닝 파이토치 교과서 (4: 합성곱신경망 (1)) (0) | 2023.03.04 |
딥러닝 파이토치 교과서 (3: 딥러닝 기초 정리) (0) | 2023.03.03 |