티스토리 뷰

머신러닝&딥러닝

모델 저장 및 재사용

4OurFuture 2025. 2. 28. 08:48
728x90
반응형

딥러닝 모델을 학습시키는 데는 많은 시간과 컴퓨팅 자원이 필요합니다. 따라서 한 번 학습된 모델을 저장하고, 필요할 때 불러와 사용하면 매우 효율적입니다.

이번 글에서는 케라스 모델 저장 및 불러오기 방법, 그리고 모델 서빙(Serving) 및 추론(Inference) 실습을 다뤄보겠습니다.


1. 모델 저장 (Save) 및 불러오기 (Load)

(1) 전체 모델 저장 및 불러오기 (HDF5 형식)

모델 전체(구조 + 가중치 + 옵티마이저 상태)를 단일 파일로 저장할 수 있습니다.

모델 저장

model.save("my_model.h5")

모델 불러오기

from tensorflow.keras.models import load_model

loaded_model = load_model("my_model.h5")
 

🔹 HDF5 파일을 저장하면 다음 정보를 보존할 수 있음

  • 모델의 구조 (Sequential 또는 Functional API)
  • 모델의 가중치(Weights)
  • 모델의 훈련 상태 (Optimizer, Loss 등)

(2) 모델의 가중치만 저장 및 불러오기

  • 가중치만 저장하고 싶을 때는 .h5 또는 .weights 파일로 저장 가능합니다.
  • 모델의 구조는 저장되지 않으므로, 불러오기 전에 모델을 먼저 생성해야 합니다.

가중치 저장

model.save_weights("my_weights.h5")

가중치 불러오기

# 동일한 모델을 먼저 정의해야 함
model.load_weights("my_weights.h5")

(3) TensorFlow SavedModel 포맷으로 저장

  • .h5 포맷 대신 TensorFlow SavedModel 형식으로 저장 가능
  • TensorFlow Serving 및 다양한 플랫폼에서 사용 가능

모델 저장

model.save("saved_model/")

모델 불러오기

loaded_model = load_model("saved_model/")

2. 모델 서빙(Serving) 및 추론(Inference) 실습

저장된 모델을 활용하여 실제 데이터에서 예측(Inference)하는 방법을 실습해보겠습니다.

(1) 새로운 데이터로 예측하기

import numpy as np

# 예제 입력 데이터 (100개 특성)
new_data = np.random.rand(1, 100)  # 입력 데이터 1개

# 예측 실행
prediction = loaded_model.predict(new_data)
print("예측 결과:", prediction)

(2) TensorFlow Serving을 활용한 모델 서빙

TensorFlow Serving을 사용하면 API 형태로 모델을 배포할 수 있습니다.

1) TensorFlow 모델 저장

model.save("serving_model/")

2) TensorFlow Serving 실행 (터미널에서)

tensorflow_model_server --rest_api_port=8501 --model_base_path="serving_model/"

3) API 요청을 보내서 예측 수행 (Python 코드)

import requests
import json
import numpy as np

# 예제 입력 데이터
data = {"instances": np.random.rand(1, 100).tolist()}

# REST API 요청
response = requests.post("http://localhost:8501/v1/models/model:predict", json=data)

# 결과 출력
print(response.json())
 

이제 모델을 API로 배포하여 다른 애플리케이션에서 사용할 수 있습니다.


결론

이번 글에서는 모델 저장 및 재사용 방법을 다루었습니다.

HDF5 또는 SavedModel 포맷으로 저장 및 불러오기
가중치만 저장하여 재사용하는 방법
TensorFlow Serving을 활용한 모델 배포 및 예측

 

728x90
반응형