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

Functional API가 필요한 이유

~8 min · functional

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

모델에 건너뛰기 연결, 여러 입력과 출력, 공유 레이어가 들어오면 Sequential은 표현할 수 없지만 Functional API는 그래프로 그려낼 수 있어. ResNet, U-Net, 멀티모달 모델이 모두 이 방식으로 만들어져. output = layer(input)으로 흐름을 잇고 마지막에 keras.Model(inputs, outputs)로 묶는 것이 기본 문법이야.

실전 모델은 직선으로만 흐르지 않아

데이터는 갈라지고 다시 합쳐지며 앞 레이어를 건너뛰기도 해. Sequential에는 두 번째 입력을 받거나 residual add를 만들고, 나뉜 경로를 다시 concatenate하는 문법이 없어. 일렬 목록으로 표현할 수 없는 순간 Functional API가 필요해.

Functional API는 레이어 연결을 방향성 비순환 그래프(DAG)로 표현하므로 다음 구조를 만들 수 있어.

  • 다중 입력 — 텍스트, 영상, 메타데이터를 합치기
  • 다중 출력 — 클래스와 신뢰도를 함께 예측하기
  • 건너뛰기 연결 — ResNet residual block처럼 레이어를 건너 연결하기
  • 레이어 공유 — Siamese 모델처럼 같은 가중치를 여러 입력에 적용하기
  • 모델 중첩 — 한 모델을 다른 모델 안에서 레이어처럼 호출하기

제품 모델의 기본 선택인 이유

ResNet, U-Net, Inception, Siamese, 멀티모달 모델처럼 현대의 주요 구조는 대부분 Functional API나 Subclassing으로 작성해. Functional API가 제품 코드에 특히 잘 맞는 까닭은 그래프를 직렬화할 수 있기 때문이야. Keras는 구조를 JSON으로 저장하고 그림으로 나타내며 소스 코드 없이도 복원할 수 있어. 반면 Model을 상속하면 Python 제어 흐름을 자유롭게 쓰는 대신 정적인 그래프의 장점을 일부 포기해. 구조가 고정된 DAG라면 Functional API를 쓰고, 실행할 때마다 Python 로직이 달라져야 할 때만 Subclassing을 선택해.

External links

Exercise

2015년 이전 구조인 AlexNet과 이후 구조인 ResNet의 데이터 흐름을 각각 그려. 어느 쪽이 목록으로 표현되고 어느 쪽이 DAG가 필요한지 구분해.

Progress

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

댓글 0

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

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