본문 바로가기
C.W.K.
Stream
Lesson 02 of 07 · published

합성곱 레이어

~9 min · layers

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

영상에서는 모든 픽셀을 모든 출력에 연결할 필요가 없어

Dense는 특징 벡터에는 잘 맞지만 256×256 RGB 영상만 해도 약 20만 개의 입력을 모두 연결해야 해 지나치게 커져. 합성곱 레이어는 영상의 어느 위치에서든 모서리를 찾는 방식은 같다는 성질을 이용해. 작은 커널을 입력 전체에 움직이며 같은 가중치를 공유하므로 매개변수가 훨씬 적고 위치 변화에도 강해져.

영상의 기본 일꾼 Conv2D

filters는 출력 채널 수, kernel_size는 커널 크기, strides는 이동 간격, padding은 테두리를 처리하는 방식을 정해. Conv1D는 텍스트·오디오 시퀀스, Conv3D는 영상·부피 데이터에 사용해. Depthwise, separable, dilated 변형은 효율이나 수용 영역을 조절할 때 꺼내.

출력 모양은 padding과 strides가 좌우해

'valid'는 패딩을 넣지 않아 레이어마다 공간 크기가 (kernel - 1)만큼 줄어. 'same'은 테두리를 채워 입력 크기를 보존해. strides=2면 각 공간 차원이 절반이 되어 별도 풀링 없이 다운샘플할 수 있어. 처음에는 Conv2D와 'same' 조합이 안전해.

가벼운 모델에는 SeparableConv2D

SeparableConv2D는 표준 합성곱을 채널별 depthwise 연산과 채널을 섞는 1×1 pointwise 연산으로 나눠. 호출 방식은 비슷하지만 매개변수를 크게 줄일 수 있어 모바일 모델에서 널리 사용해.

Code

Conv2D와 SeparableConv2D — 비슷한 API, 더 적은 매개변수·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

Conv2D(32, 3, padding='same') → MaxPooling2D → Conv2D(64, 3, padding='same') → MaxPooling2D → Flatten → Dense(10) 모델을 만들어. 공간 크기와 채널 변화를 확인한 뒤 두 Conv2D를 SeparableConv2D로 바꿔 매개변수 수를 비교해.
Hint
출력 모양은 같지만 SeparableConv2D 모델의 매개변수 수가 훨씬 적어야 해.

Progress

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

댓글 0

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

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