C.W.K.
Stream
Lesson 03 of 06 · published

Functional API — DAG와 skip connection

~14 min · functional, skip-connection, resnet, multi-io

Level 0Level 0
0 XP0/78 lessons0/17 achievements
0/100 XP to next level100 XP to go0% complete

Production model이 사는 곳

Functional API는 layer 호출을 symbolic tensor에 작동하는 함수 호출처럼 다뤄. keras.Input(...)으로 시작해서 tensor를 layer에 통과시키고, 결과 tensor를 keras.Model(inputs, outputs)에 넘겨. 이게 모든 DAG를 지원해 — 분기, skip connection, 다중 입력, 다중 출력.

keras.applications의 거의 모든 model (ResNet, EfficientNet, MobileNet)이 Functional API 써. 그 구현들 읽는 게 좋은 연습 — canonical 예시야.

가장 자주 쓰는 두 패턴: residual block (skip connection을 main path로 다시 더하기), multi-input model (image branch + metadata branch, classifier 전에 concat).

Code

Residual block — Functional style·python
import keras
from keras import layers

inputs = keras.Input(shape=(32, 32, 3))

# First conv block
x = layers.Conv2D(32, 3, activation='relu', padding='same')(inputs)
x = layers.Conv2D(32, 3, activation='relu', padding='same')(x)
block1_out = layers.MaxPooling2D(2)(x)         # (16, 16, 32)

# Second block with skip connection
x = layers.Conv2D(64, 3, activation='relu', padding='same')(block1_out)
x = layers.Conv2D(64, 3, activation='relu', padding='same')(x)
shortcut = layers.Conv2D(64, 1, padding='same')(block1_out)  # 1x1 conv to match channels
block2_out = layers.add([x, shortcut])         # residual connection

x = layers.GlobalAveragePooling2D()(block2_out)
outputs = layers.Dense(10, activation='softmax')(x)

model = keras.Model(inputs, outputs, name="mini_resnet")
print(f"Parameters: {model.count_params():,}")
Multi-input + multi-output·python
import keras
from keras import layers

image_input = keras.Input(shape=(224, 224, 3), name="image")
meta_input  = keras.Input(shape=(16,), name="metadata")

x = layers.Conv2D(32, 3, activation='relu')(image_input)
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dense(64, activation='relu')(x)

m = layers.Dense(32, activation='relu')(meta_input)
combined = layers.concatenate([x, m])

class_out = layers.Dense(10, activation='softmax', name="class_output")(combined)
conf_out  = layers.Dense(1, activation='sigmoid', name="confidence_output")(combined)

model = keras.Model(
    inputs=[image_input, meta_input],
    outputs=[class_out, conf_out],
    name="multi_modal"
)

model.compile(
    optimizer='adam',
    loss={'class_output': 'sparse_categorical_crossentropy',
          'confidence_output': 'binary_crossentropy'},
    metrics={'class_output': ['accuracy'],
             'confidence_output': ['accuracy']},
)

External links

Progress

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

댓글 0

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

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