C.W.K.
Stream
Lesson 02 of 07 · published

Convolutional layer

~9 min · layers

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

왜 Dense 말고 convolution 이냐

Dense 는 모든 입력을 모든 출력에 연결해 — feature vector 엔 괜찮은데 image 엔 재앙이야. 256×256 RGB 만 해도 벌써 ~20 만 개 숫자거든. Conv layer 는 spatial data 의 단순한 사실을 써먹어 — 왼쪽 위 모서리 edge 를 잡는 패턴이 오른쪽 아래 edge 잡는 패턴이랑 같다는 거. 그래서 작은 kernel 하나 학습해서 입력 전체에 슬라이드시키고 weight 를 사방에서 공유해. param 훨씬 적고 translation invariance 도 공짜.

image 의 main workhorse, Conv2D

Conv2D 가 기본. 인자: filters (출력 채널 수), kernel_size (커널 크기, e.g. 3 또는 (3,3)), strides (이동 간격), padding ('same' 또는 'valid'). Conv1D 는 sequence (text / audio), Conv3D 는 video / volumetric. depthwise / separable / dilated 변형은 효율 / receptive field 조절용.

출력 shape 를 정하는 두 인자

padding: 'valid' 는 패딩 없음 → layer 마다 (kernel - 1) 만큼 잘림. 'same' 은 테두리를 패딩해서 입력 spatial 크기 보존. strides: 슬라이딩 윈도우 보폭 — strides=2 면 각 spatial 차원 반 토막, pooling 없이 다운샘플하는 싸구려 방법. 이 둘만 잡으면 CNN shape 수학은 알아서 따라와. 기본은 Conv2D + 'same' 이 안전한 출발점.

param 아쉬울 땐 SeparableConv2D

SeparableConv2D 는 그냥 끼워 넣는 효율 교체품 — 표준 convolution 을 depthwise (채널당 필터 하나) + pointwise 1×1 (채널 섞기) 로 쪼개. 호출 시그니처 똑같고 param 은 대략 한 자릿수 줄어. 모바일급 architecture 들이 이거에 기대는 이유야.

Code

Conv2D vs SeparableConv2D — API 같고 param 적음·python
# Standard Conv2D: 32 filters of 3×3
layers.Conv2D(32, kernel_size=3, activation="relu", padding="same")

# SeparableConv2D: same API, ~8x fewer params
layers.SeparableConv2D(32, kernel_size=3, activation="relu", padding="same")

External links

Exercise

4-layer CNN 짜 — Conv2D(32, 3, padding='same') → MaxPooling2D → Conv2D(64, 3, padding='same') → MaxPooling2D → Flatten → Dense(10). model.summary() 로 각 MaxPooling2D 에서 spatial dim 반 토막, 채널 증가 확인. 그 다음 Conv2D 둘 다 SeparableConv2D 로 바꿔서 총 param 수 비교.
Hint
'Param #' 열 봐 — 같은 출력 shape 인데 SeparableConv2D 버전이 훨씬 가벼워야 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.