- 부트캠프에서 설명을 듣긴했는데.. 너무 오래되서 책 읽는데도 모르겠더라.
나는....정말로 내가 논문을 어떻게 gpt 없이 썼는지 모르겠어..
모르는 것을 물어볼 데가 없어서..진짜.....피눈물 흘리면서 논문 찾고, 그냥 해석했지..
지금은 그냥..다 알려주네
- 공부하기 최적이다.. 정말.
- 캐글 강아지 vs 고양이 데이터 셋으로 모델을 만드는 과정임
- *케라스 창시자에게 배우는 딥러닝

- *GPT가 알려줌
[CNN의 출력 크기 계산 공식]
📌 Output Shape (출력 크기)
**출력 크기(output shape)**는 각 레이어를 거친 후 변환된 데이터의 크기
보통 (batch_size, height, width, channels) 형태.
Conv2D 레이어에서 **필터(커널)**가 입력 이미지에 적용될 때, 출력 크기는 다음 공식으로 계산됨:

여기서:
- Input size: 입력 이미지 크기 (예: 180 × 180)
- Kernel size: 필터 크기 (예: 3 × 3)
- Stride: 필터가 이동하는 간격 (기본값 1, 이 모델도 1로 가정)
- Padding: valid (패딩 없음)
conv2d_6 레이어의 경우:
- 입력 크기: (180, 180)
- 커널 크기: (3, 3)
- 스트라이드: 1
- 패딩 없음 (valid)
→ 위 공식을 적용하면:
Stride가 2면 어떻게 될까?
만약 **스트라이드가 2**였다면, 공식은 이렇게 바뀜:
그러면 출력 크기가 (89, 89)로 더 작아짐.
➡ 스트라이드가 클수록 출력 크기가 작아지는 이유!
Padding이 same이면?
만약 패딩을 same으로 설정하면, 입력 크기와 출력 크기가 동일하게 유지되도록 0을 추가함.
공식이 이렇게 바뀜:
즉,
- Stride = 1이면 출력 크기 180 × 180 유지
- Stride = 2면 출력 크기 90 × 90
[결론]
- 필터 크기가 클수록 출력 크기가 줄어듦 (-3 때문)
- 스트라이드가 클수록 더 크게 줄어듦 (÷2 때문)
- 패딩이 있으면 크기를 유지할 수도 있음 (same)
[CNN 모델의 param # (파라미터 수) 계산법]
📌 Param # (파라미터 개수)
**파라미터 개수(Param #)**는 학습해야 할 가중치의 총 개수를 의미해.
CNN에서 파라미터 수는 가중치(Weight)와 편향(Bias)의 개수를 의미해.
각 Conv2D 레이어에서 파라미터 수는 다음 공식으로 계산할 수 있어:
여기서
- Kernel Width × Kernel Height → 필터(커널) 크기
- Input Channels → 입력 채널 수 (RGB 이미지는 3)
- +1 → 편향(Bias) 추가
- Filters → 현재 레이어의 필터 개수
예제: conv2d_6
- 입력: (180, 180, 3)
- 필터 크기: (3 × 3)
- 필터 개수: 32
파라미터 수 계산
→ 결과: 896개 (표의 conv2d_6의 param #과 일치)
완전 연결(Dense) 레이어 파라미터 계산
dense_2
- 입력 뉴런 수: 12,544
- 출력 뉴런 수: 1
→ 결과: 12,545개 ✅
결론
[커널 크기와 입력 채널 수의 차이]
1️⃣ 커널 크기 (Kernel Size)
커널 크기는 **필터(커널)가 한 번에 보는 공간(영역)**을 의미해.
보통 (높이, 너비) 형태로 표현하고, 일반적인 CNN에서는 (3×3), (5×5) 같은 크기를 사용해.
예를 들어 (3×3) 커널은 입력 데이터의 3×3 크기 영역을 한 번에 본다는 뜻이야.
2️⃣ 입력 채널 수 (Input Channels)
입력 채널 수는 입력 데이터가 가진 색상 또는 특징 맵(Feature Maps)의 개수를 의미해.
이미지 데이터를 예로 들면:
- 흑백 이미지: 1 채널 (Grayscale)
- 컬러 이미지 (RGB): 3 채널 (Red, Green, Blue)
- CNN에서 중간 레이어에서는 필터를 거치면서 채널 수가 증가함.
CNN의 각 필터(커널)는 입력 채널 개수만큼 쌓여 있음!
즉, 입력 채널 수 = 필터 깊이(Depth) 라고 볼 수 있어.
3️⃣ 차이점 정리
개념의미 예시
커널 크기 (Kernel Size) | 필터가 한 번에 보는 영역의 크기 | (3×3), (5×5) |
입력 채널 수 (Input Channels) | 입력 데이터의 채널 개수 | 3 (RGB 이미지), 64 (중간 CNN 레이어) |
4️⃣ CNN에서 입력 채널 수와 커널 크기의 관계
예를 들어, 입력 데이터가 (180, 180, 3) 이고,
커널 크기가 (3×3), 필터 개수가 32개라면:
- 커널(필터) 하나는 입력 데이터의 3개 채널(RGB)을 모두 봐야 함
→ 그래서 커널의 깊이 = 입력 채널 수 (3) - 즉, 각 필터는 (3×3×3) 크기의 가중치를 가짐
- 필터 개수가 32개라면 (3×3×3 + 1) × 32 = 896 (파라미터 개수)
5️⃣ 예제 그림으로 이해하기
🎯 입력 데이터 (RGB 이미지)
📏 (180, 180, 3): 가로 180px, 세로 180px, 채널 3개(RGB)
📌 필터(커널)의 크기
- (3×3×3) → 3×3 영역을 보면서, 3개 채널(RGB)의 정보를 함께 처리
🔄 출력 특징 맵
- 필터(커널) 개수가 32개라면, 출력은 (178, 178, 32)
- 3개 채널이 **32개 특징맵(필터 개수)**로 변환됨
✅ 결론
- 커널 크기 (3×3): 한 번에 보는 작은 영역의 크기
- 입력 채널 수 3 (RGB): 커널이 3개의 채널을 모두 커버해야 함
- CNN에서는 입력 채널 수와 커널의 깊이가 동일해야 함
- 필터 개수(출력 채널 수)는 원하는 특징맵 개수를 조절하는 역할
📌 model.summary()에서 알 수 있는 의미
이 모델의 summary()를 보면 CNN 네트워크의 구조, 출력 크기 변화, 학습해야 할 가중치 개수 등을 확인할 수 있어.
이걸 통해 모델이 어떻게 데이터 크기를 줄여가는지, 연산량이 얼마나 되는지 등을 분석할 수 있음!
1️⃣ 모델의 구조와 계층적 특징 학습
💡 레이어들이 어떻게 연결되어 있는지 파악 가능
- Conv2D → MaxPooling2D → Conv2D → MaxPooling2D 패턴을 반복
- 합성곱(Conv2D) → 특징 추출
- 맥스풀링(MaxPooling2D) → 차원 축소
- Flatten → Dense → 최종 출력층
2️⃣ 출력 크기 변화를 통해 데이터 압축 과정 확인
각 레이어를 거치면서 입력 이미지 크기가 점점 작아지는 과정을 볼 수 있어.
✅ 예를 들어:
- 초기 입력 크기: (180, 180, 3) (RGB 이미지)
- Conv2D 적용 후 (178, 178, 32)
- MaxPooling(2×2 풀링) 후 (89, 89, 32) (크기가 절반으로 줄어듦)
- 마지막 Conv2D 이후 (7, 7, 256)
- Flatten 후 Dense(완전연결층) (12544 → 1) → 최종 출력
💡 의미:
- 특징 맵의 크기는 줄어들고, 채널(필터)은 증가 → 점점 더 고수준의 특징을 학습
- 풀링층을 통해 차원을 줄이면서 연산량 감소
- Flatten을 통해 2D 데이터를 1D 벡터로 변환 → 완전연결층(Dense) 사용 가능
3️⃣ 학습해야 할 파라미터 개수 확인
각 레이어의 Param #을 보면,
- Conv2D에서 학습해야 할 필터(가중치) 개수가 많음
- 필터 개수가 증가할수록(32 → 64 → 128 → 256), 파라미터 수도 급증
- Flatten 이후 Dense(완전연결층)는 파라미터가 가장 많음
→ 마지막 Dense 레이어의 파라미터 수: 12,545개 (뉴런 1개당 12,544개의 입력)
💡 의미:
- Conv2D 필터 개수가 많아질수록 파라미터 수도 늘어나며, 모델의 표현력이 증가
- 하지만 너무 많으면 과적합(overfitting) 위험!
- 전체 파라미터 개수: 991,041개 → 꽤 큰 모델이라 연산량이 많을 것
4️⃣ 모델의 최종 출력 확인
- 최종 출력 크기 (None, 1) → 단일 값 출력 (회귀 or 이진 분류 가능)
→ 이 모델은 아마도 이진 분류(binary classification) 또는 회귀(regression) 모델일 가능성이 큼!
→ 활성화 함수(activation) 를 보면 더 정확히 알 수 있음 (예: sigmoid면 분류, linear면 회귀)
📌 결론: 우리가 알 수 있는 정보
✅ 이 모델은 CNN 기반의 분류 또는 회귀 모델
✅ 합성곱 + 풀링을 반복하며 점점 특징을 추출
✅ 출력 크기 변화를 보면서 데이터가 어떻게 압축되는지 확인 가능
✅ 전체 파라미터 수가 크므로 학습 시간이 오래 걸릴 수도 있음
✅ 마지막 Dense(1)이므로 이진 분류 또는 회귀 모델로 해석 가능
====== 그래서 최적을 어떻게 찾는지 물어보니깐 아래처럼 정리해줌. 우선 책에서는 위까지 읽었음.
📌 파라미터 개수가 많아질수록 생길 수 있는 문제점
- 과적합(Overfitting) → 훈련 데이터에 너무 최적화되어 새로운 데이터에서 성능 저하
- 그래디언트 소실/폭주(Vanishing/Exploding Gradient) → 깊은 신경망에서 기울기가 0이 되거나 너무 커짐
- 연산 비용 증가 → 학습 시간 증가, 더 많은 메모리 필요
그래서 적절한 파라미터 개수를 찾는 게 중요해!
그럼 적절한 지점을 어떻게 판단할까? 🤔
✅ 1️⃣ 과적합/과소적합을 체크하는 방법
- 훈련 데이터와 검증 데이터 성능 비교
- train_acc(훈련 정확도) vs. val_acc(검증 정확도)
- 차이가 너무 크면 과적합 가능성 → 파라미터 수 줄이기 or 정규화 필요
- 차이가 너무 없고 전체적으로 성능이 낮다면 과소적합 가능성 → 더 많은 파라미터 필요
- Loss 곡선 확인
- train_loss가 계속 줄어드는데 val_loss가 증가하면 과적합
- train_loss와 val_loss가 모두 높으면 과소적합
✅ 해결 방법:
- 과적합이면 → 파라미터 수 줄이기, 드롭아웃(Dropout) 사용, L1/L2 정규화 적용
- 과소적합이면 → 더 깊은 네트워크 사용, 파라미터 수 늘리기
✅ 2️⃣ 그래디언트 문제를 체크하는 방법
- Gradient Vanishing (기울기 소실) 체크
- 초깃값이 너무 작거나 비선형 활성화 함수(ReLU 이외)를 사용하면 발생
- 해결책: Batch Normalization, ReLU 계열 (LeakyReLU, ELU) 사용
- Gradient Exploding (기울기 폭주) 체크
- 학습률이 너무 크거나 파라미터가 너무 많을 때 발생
- 해결책: Gradient Clipping(기울기 절단) 사용
✅ 해결 방법:
- 기울기 분포 시각화 (torch.nn.utils.clip_grad_norm_() 등 활용)
- 네트워크가 깊어질수록 Residual Connection(ResNet) 사용
✅ 3️⃣ 모델 복잡도 & 데이터셋 크기 고려
- 데이터셋이 작은데 파라미터가 많으면 과적합 위험
- 데이터셋이 큰데 모델이 단순하면 과소적합 위험
📌 기본적인 가이드라인
데이터 크기적절한 모델 복잡도 (파라미터 수)
데이터가 적음 | 얕은 신경망, Dropout, 정규화 필수 |
데이터가 많음 | 깊은 신경망, 파라미터 수 증가 가능 |
✅ 데이터가 적다면 전이 학습(Transfer Learning) 을 활용하는 것도 방법!
✅ 4️⃣ 실험을 통한 최적 파라미터 찾기
- Hyperparameter Search 사용 (Grid Search, Random Search, Bayesian Optimization)
- L1/L2 정규화 적용하여 불필요한 가중치 감소
- Dropout(0.2~0.5) 적용하여 과적합 방지
📌 결론
✔ 출력층보다 필터 개수가 너무 많아지면 과적합 가능성이 높음
✔ 훈련 vs 검증 성능 비교하며 적절한 지점 찾기
✔ 데이터 크기에 따라 모델 복잡도를 조절해야 함
✔ 그래디언트 소실/폭주 문제 체크 → 필요하면 Batch Norm, Residual Connection 사용
✔ 정규화, Dropout 적용해서 불필요한 가중치를 줄이기
즉, 적절한 파라미터 개수는 데이터 크기, 모델 깊이, 과적합 여부를 보면서 실험적으로 찾아야 해! 🚀
'AI > Deep Learning' 카테고리의 다른 글
[객체 탐지 성능 지표] 성능, 속도 평가 지표 (0) | 2025.03.11 |
---|---|
[이미지 CNN] YOLO 모델 성능지표, 파라미터 (0) | 2025.03.08 |
[케라스 창시자에게 배우는 딥러닝] 1, 2장 (0) | 2025.03.07 |
[CV] TED, 즉각적 사물 인식을 컴퓨터가 학습하는 과정 (0) | 2025.03.06 |
[ML 용어 정리 ] DNN, 최적화/활성화/손실 함수, 텐서, 텐서플로우, 분류 (0) | 2024.08.02 |