상세 컨텐츠

본문 제목

[K-DIGITAL] sklearn / tf 모델 저장 & Keras Callbacks API

PYTHON/K-DIGITAL

by ranlan 2021. 7. 16. 11:53

본문

728x90

Scikit-learn

모델 인스턴스 저장 후 불러오기 (.pkl)

from sklearn.externals import joblib

# 저장
joblib.dump(model, 'model.pkl', compress=True)

# 불러오기
model_loaded = joblib.load('model.pkl')

 

 

TensorFlow

모델 인스턴스 저장(.h5)

from tensorflow.keras import models

model.save('trained_model.h5') # model save
model.save_weights('trained_model.h5') # weights만 따로 저장

저장한 모델 불러오기

from tensorflow import models

model = models.load_model('trained_model.h5') # load model
model.load_weights('trained_model.h5') # weights load

 

 

Keras Callbacks API

모델이 학습 시작된 이후에는 학습 완료 전까지 사람이 컨트롤할 수 없음

이를 해결하기 위해 Keras의 콜백함수를 이용하여 학습 중 모델 중간 저장 가능

 

tf.keras.callbacks.ModelCheckpoint() 학습 중간 저장

tf.keras.callbacks.ModelCheckpoint( 
    filepath, # 모델 저장 경로
    monitor = 'val_loss', # 'loss', 'val_loss', 'accuracy' ...
    verbose = 0, # 불필요한 로그 삭제 
    save_best_only = False,
    # True(보통 true로 사용) monitor 중인 지표 기준 가장 좋은 모델 저장 / False: 하단 save_freq 기준 주기적 저장
    save_weights_only = False, # True == model.save_weights(filepath) / False == model.save(filepath) 
    mode = 'auto', # 'auto', 'min', 'max'
    save_freq = 'epoch', # 'epoch' 또는 batch size(int)
    save_freq = 5 * batch_size # 5epoch마다 model weight 저장 ('batch_size' 정의되어 있어야함)
)

tf.keras.callbacks.EarlyStopping() 학습 조기 종료

tf.keras.callbacks.ReduceLROnPlateau() 학습율 자동 조절

 

체크포인트 저장

# 경로에 포함된 폴더가 있어야함

# 예)
import os
path='path'
os.mkdir(path)

checkpoint_path = 'saved_models/titanic_4-layer_elu.h5'

# 가장 낮은 validation loss의 모델 저장

# ModelCheckpoint 콜백함수 객체 생성
callback_checkpoint = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, 
                                                         monitor='val_loss',
                                                         save_best_only=True, 
                                                         verbose=0)
# 콜백함수 호출하여 모델 학습 진행
history = model.fit(train_data, train_label, 
                    batch_size=100, epochs=100, validation_split=0.3, verbose=0,
                    callbacks=[callback_checkpoint]) # callback

(모델 성능은 마지막 학습 완료한 시점을 기준으로 결정됨)

 

체크포인트로 저장된 모델 불러오기

model = models.load_model('saved_models/titanic_4-layer_elu.h5')
728x90

관련글 더보기

댓글 영역