분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
MLP/CNN 파라미터 수를 구해보자!
안녕하세요 데이크루 월드파파 입니다.
딥러닝에서 모델링을 하다보면 파라미터 수를 확인하고자 하는데요,
MLP/CNN 에서의 파라미터 수를 구하는 방법을 설명 드리고자 합니다.
인풋 데이터가 9개의 피처를 가지고 있다고 해보겠습니다.
위의 그림과 같이 1층, 2층에 각각에 16개의 퍼셉트론을 지정해주고
마지막 아웃풋을 1개로 지정할 시 파라미터수는 몇개가 나올까요?
Model.summary() 를 해보면 다음과 같은 결과가 나옵니다.
그럼 MLP의 파라미터 수는 다음과 같이 구할 수 있습니다.
입력층의 9개의 퍼셉트론 + 1개의 bias = 10개를
1층의 16개의 퍼셉트론 갯수와 곱해주면 160개가 나옵니다.
그리고 1층의 16개의 퍼셉트론 + 1개의 bias = 17개를
2층의 16개의 퍼셉트론 갯수와 곱해주면 272개가 나옵니다
마지막으로 2층의 16개의 퍼셉트론 + 1개의 bias = 17개를
출력층의 1개의 퍼셉트론 갯수와 곱해주면 17개가 나옵니다.
따라서 다 더해주면 160 + 272 + 17 = 449개가 됩니다.
그림으로 정리하자면 다음과 같습니다.
그럼 조금 더 복잡한 CNN의 파라미터 수를 구해봅시다.
우선 인풋 데이터 28*28*1를 가지고 있다고 하였을 시,
위의 그림처럼 3*3커널이 32개가 있고
MaxPooling을 2*2사이즈로 합니다.
이후 3*3커널이 64개가 있고
MaxPooling을 2*2사이즈로 또 한번 합니다.
이것을 1차원으로 Flatten 해주고
절반을 드롭아웃을 해주고
아웃풋을 10개로 만들어준다면
파라미터 수는 몇개가 될까요?
Model.summary() 를 해보면 다음과 같습니다.
차근차근 그럼 CNN의 파라미터 수를 살펴보겠습니다.
Conv2d param이 320개인 이유
1개 인풋 수 * 3X3 * 32개 커널 + 32개 커널 비아 = 320
Conv2d_1 param이 18496인 이유
32개 인풋 수 * 3*3 * 64개 커널 + 64개 커널 비아 = 18496
마지막 output param이 16010인 이유
5*5*64인 Shape를 Flatten 펼치면 1600개 퍼셉트론이 나옵니다.
위 1번의 MLP 설명에 따라
(1600개 퍼셉트론 + 1 bias) * 10개의 아웃풋 = 16010
CNN 파라미터 갯수는 다음 공식을 따를 수 있습니다.
즉,
Conv layer의 가중치 수 = Conv layer에서 커널 사이즈 제곱 * 입력 이미지 채널 수 * 커널의 수
Conv layer의 편향 수 = 커널의 수
Conv layer의 파라미터 수 = Conv layer의 가중치 수 + Conv layer의 편향 수
그럼 첫번째 conv2d 를 예시로 들어보겠습니다.
param이 320개인 이유는,
Wc = Conv layer의 가중치 수 = 3^2 * 1 * 32 = 288
Bc = Conv layer의 편향 수 = 32
Wc + Bc = 320 이 됩니다.
참고로,
Maxpooling에 의해서 아웃풋 Shape가 변하는 공식은 다음을 따릅니다.
즉,
아웃풋 이미지 사이즈 =
(인풋 이미지의 사이즈 – 커널의 너비 사이즈 + 2* 패딩 사이즈)/스트라이드 + 1
이 됩니다.
정리하자면 다음 그림과 같습니다.
다음의 사이트에서 자세한 내용을 참고 할 수 있습니다.
https://seongkyun.github.io/study/2019/01/25/num_of_parameters
다소 헷갈릴 수 있으나 차근차근 실습해보시길 바랍니다!
감사합니다.
* 본 포스팅은 데이콘 서포터즈 “데이크루" 1기 활동의 일환입니다.
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved