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

실전: 저장, 불러오기, 검증

~12 min · verification, deployment-prep

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

Production 사고 막는 검증 단계

전문적 저장 workflow는 저장에서 끝나지 않아 — 불러온 model이 원본과 동일한 출력 내는지 검증. 수치적 차이는 inference mode의 BatchNormalization, 직렬화 잘 안 된 custom layer 설정, 버전 불일치에서 슬그머니 들어올 수 있어.

검증은 간단: 저장 전 고정 test 샘플로 예측, 불러온 model로 예측, 비교. max 절대 차이가 0 근처여야 (float32엔 < 1e-5). 그보다 크면 직렬화 버그 — 배포 후가 아니라 전에 찾아.

Code

End-to-end save + verify·python
import tensorflow as tf
import numpy as np
import os

# Build, train (snippet)
model = tf.keras.Sequential([
    tf.keras.Input(shape=(784,)),
    tf.keras.layers.Dense(256, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.3),
    tf.keras.layers.Dense(10),
])
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
# ... model.fit(...)

# 1. Capture original predictions
test_sample = x_test[:10]
original = model.predict(test_sample)

# 2. Save in multiple formats
os.makedirs('exports', exist_ok=True)
model.save('exports/model.keras')
model.save('exports/saved_model/')
model.save_weights('exports/weights.weights.h5')

# 3. Verify each format
def verify(loaded, name):
    preds = loaded.predict(test_sample)
    diff = np.max(np.abs(original - preds))
    print(f"{name}: max diff = {diff:.8f}")
    assert diff < 1e-5, f"{name} differs! diff={diff}"

verify(tf.keras.models.load_model('exports/model.keras'), '.keras')
verify(tf.keras.models.load_model('exports/saved_model/'), 'SavedModel')

# 4. Version-stamp for TF Serving
tf.saved_model.save(model, 'serving/my_classifier/1/')

print("All formats verified. Ready for deployment.")

Exercise

Training한 model 아무거나 (또는 MNIST 짧게 training). .keras와 SavedModel로 저장. 각각 다시 로드하고 예측이 원본과 1e-5 안에 일치하는지 검증. 더 큰 차이 보이면 어느 layer가 범인인지 파.

Progress

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

댓글 0

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

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