DS가 되기 위한 여정 👩‍💻

AI/Deep Learning

[CNN] 이미지 컨브넷 차원구조 변화 summary() 결과 해석

Tashapark 2025. 3. 7. 20:50
728x90
반응형

- 부트캠프에서 설명을 듣긴했는데.. 너무 오래되서 책 읽는데도 모르겠더라.

나는....정말로 내가 논문을 어떻게  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개라면:

  1. 커널(필터) 하나는 입력 데이터의 3개 채널(RGB)을 모두 봐야 함
    그래서 커널의 깊이 = 입력 채널 수 (3)
  2. 즉, 각 필터는 (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️⃣ 모델의 최종 출력 확인

dense_2 (Dense) (None, 1) 12,545
  • 최종 출력 크기 (None, 1) → 단일 값 출력 (회귀 or 이진 분류 가능)
    → 이 모델은 아마도 이진 분류(binary classification) 또는 회귀(regression) 모델일 가능성이 큼!
    활성화 함수(activation) 를 보면 더 정확히 알 수 있음 (예: sigmoid면 분류, linear면 회귀)

📌 결론: 우리가 알 수 있는 정보

이 모델은 CNN 기반의 분류 또는 회귀 모델
합성곱 + 풀링을 반복하며 점점 특징을 추출
출력 크기 변화를 보면서 데이터가 어떻게 압축되는지 확인 가능
전체 파라미터 수가 크므로 학습 시간이 오래 걸릴 수도 있음
마지막 Dense(1)이므로 이진 분류 또는 회귀 모델로 해석 가능

 

 

====== 그래서 최적을 어떻게 찾는지 물어보니깐 아래처럼 정리해줌. 우선 책에서는 위까지 읽었음. 

📌 파라미터 개수가 많아질수록 생길 수 있는 문제점

  • 과적합(Overfitting) → 훈련 데이터에 너무 최적화되어 새로운 데이터에서 성능 저하
  • 그래디언트 소실/폭주(Vanishing/Exploding Gradient) → 깊은 신경망에서 기울기가 0이 되거나 너무 커짐
  • 연산 비용 증가 → 학습 시간 증가, 더 많은 메모리 필요

그래서 적절한 파라미터 개수를 찾는 게 중요해!
그럼 적절한 지점을 어떻게 판단할까? 🤔


✅ 1️⃣ 과적합/과소적합을 체크하는 방법

  1. 훈련 데이터와 검증 데이터 성능 비교
    • train_acc(훈련 정확도) vs. val_acc(검증 정확도)
    • 차이가 너무 크면 과적합 가능성 → 파라미터 수 줄이기 or 정규화 필요
    • 차이가 너무 없고 전체적으로 성능이 낮다면 과소적합 가능성 → 더 많은 파라미터 필요
  2. Loss 곡선 확인
    • train_loss가 계속 줄어드는데 val_loss가 증가하면 과적합
    • train_loss와 val_loss가 모두 높으면 과소적합

해결 방법:

  • 과적합이면 → 파라미터 수 줄이기, 드롭아웃(Dropout) 사용, L1/L2 정규화 적용
  • 과소적합이면 → 더 깊은 네트워크 사용, 파라미터 수 늘리기

✅ 2️⃣ 그래디언트 문제를 체크하는 방법

  1. Gradient Vanishing (기울기 소실) 체크
    • 초깃값이 너무 작거나 비선형 활성화 함수(ReLU 이외)를 사용하면 발생
    • 해결책: Batch Normalization, ReLU 계열 (LeakyReLU, ELU) 사용
  2. Gradient Exploding (기울기 폭주) 체크
    • 학습률이 너무 크거나 파라미터가 너무 많을 때 발생
    • 해결책: Gradient Clipping(기울기 절단) 사용

해결 방법:

  • 기울기 분포 시각화 (torch.nn.utils.clip_grad_norm_() 등 활용)
  • 네트워크가 깊어질수록 Residual Connection(ResNet) 사용

✅ 3️⃣ 모델 복잡도 & 데이터셋 크기 고려

  • 데이터셋이 작은데 파라미터가 많으면 과적합 위험
  • 데이터셋이 큰데 모델이 단순하면 과소적합 위험

📌 기본적인 가이드라인

데이터 크기적절한 모델 복잡도 (파라미터 수)

데이터가 적음 얕은 신경망, Dropout, 정규화 필수
데이터가 많음 깊은 신경망, 파라미터 수 증가 가능

✅ 데이터가 적다면 전이 학습(Transfer Learning) 을 활용하는 것도 방법!


✅ 4️⃣ 실험을 통한 최적 파라미터 찾기

  1. Hyperparameter Search 사용 (Grid Search, Random Search, Bayesian Optimization)
  2. L1/L2 정규화 적용하여 불필요한 가중치 감소
  3. Dropout(0.2~0.5) 적용하여 과적합 방지

📌 결론

출력층보다 필터 개수가 너무 많아지면 과적합 가능성이 높음
훈련 vs 검증 성능 비교하며 적절한 지점 찾기
데이터 크기에 따라 모델 복잡도를 조절해야 함
그래디언트 소실/폭주 문제 체크 → 필요하면 Batch Norm, Residual Connection 사용
정규화, Dropout 적용해서 불필요한 가중치를 줄이기

즉, 적절한 파라미터 개수는 데이터 크기, 모델 깊이, 과적합 여부를 보면서 실험적으로 찾아야 해! 🚀

 

 

728x90
반응형