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

공유 layer·중첩 모델

~11 min · functional

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

공유 layer: weight 한 벌, 호출 여러 곳

공유 layer 는 같은 weight 를 다른 입력에 적용해. lesson 02 의 callable-layer 발상에서 공짜로 따라오는 거야 — layer 한 번 만들어 인스턴스 들고 여러 tensor 에 호출하면, 매 호출이 같은 weight 재사용하고 모든 호출 지점의 gradient 가 그 한 벌 weight 로 누적돼. 첫 코드 블록이 이걸로 siamese network 를 짜: shared_embedding 하나가 두 입력을 모두 encoding 하니까 model 이 '비슷함'을 거리로 잴 수 있는 단일 embedding space 를 학습해. 이 weight tying 이 핵심이야 — 입력마다 encoder 가 따로면 비교할 공유 space 자체가 없어.

중첩 model: model 이 곧 layer

어떤 Keras Model 이든 다른 model 안에서 layer 처럼 호출 가능 (둘째 코드 블록). 이건 편의 이상이야 — *transfer learning* 의 메커니즘 자체야. pretrained backbone 은 그냥 네 입력에 호출하는 Model 이고, 그 위에 새 head 붙이면 끝. 중첩 model 이 자기 weight 를 들고 다니니까 pretrained weight 로드하고 backbone.trainable = False 로 freeze 하는 게 기대대로 동작해. encoder/decoder 짝이 autoencoder 로 합쳐지는 것도 같은 중첩이야. '서브그래프 통째 재사용'이랑 'layer 한 개 재사용'을 스케일만 다른 같은 동작으로 봐.

Code

공유 embedding — siamese 유사도 network·python
# Shared embedding for a Siamese network
shared_embedding = layers.Dense(64, activation="relu", name="shared_embed")

input_a = keras.Input(shape=(128,))
input_b = keras.Input(shape=(128,))

# Same weights used for both inputs
encoded_a = shared_embedding(input_a)
encoded_b = shared_embedding(input_b)

# Compute distance
distance = layers.Lambda(
    lambda x: keras.ops.abs(x[0] - x[1])
)([encoded_a, encoded_b])
output = layers.Dense(1, activation="sigmoid")(distance)

model = keras.Model(inputs=[input_a, input_b], outputs=output)
model 중첩 — encoder + decoder 를 autoencoder 로·python
# Use an existing model as a layer
encoder = keras.Model(encoder_inputs, encoded, name="encoder")
decoder = keras.Model(decoder_inputs, decoded, name="decoder")

# Nest them
inputs = keras.Input(shape=(784,))
z = encoder(inputs)       # Model called like a layer
outputs = decoder(z)
autoencoder = keras.Model(inputs, outputs)

External links

Exercise

image similarity 용 siamese network 짜 — 공유 CNN encoder 를 두 입력에 적용, L2 거리 + sigmoid. Functional API 로. synthetic pair 로 학습.

Progress

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

댓글 0

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

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