꾸준하고 즐겁게

Keras의 ModelCheckpoint 본문

Machine Learning

Keras의 ModelCheckpoint

wj9183 2021. 4. 30. 20:05
728x90
ModelCheckpoint 사용 목적

keras.io/api/callbacks/model_checkpoint/

 

Keras documentation: ModelCheckpoint

ModelCheckpoint ModelCheckpoint class tf.keras.callbacks.ModelCheckpoint( filepath, monitor="val_loss", verbose=0, save_best_only=False, save_weights_only=False, mode="auto", save_freq="epoch", options=None, **kwargs ) Callback to save the Keras model or m

keras.io

 

양질의 데이터를 가져다 Preprocessing하고 Hyper parameter들을 잘 설정해 Modeling을 끝냈다고 가정하자.

이제 우리는 학습을 통해 조금 더 정확한 결과를 예측하는 Model을 만들길 원한다.

Training Set으로 몇 번 학습시켜야 가장 높은 Accuracy를 가진 모델을 만들 수 있을까.

과도하게 학습을 시킬 경우 Overfitting 되어 테스트셋 결과에만 익숙한 주입식 교육의 피해자가 탄생하고,

덜 학습 시킬 경우 Underffiting 되어 우리가 직접 눈대중으로 때려맞추느니만 못한 수준의 Model이 되어버릴 수도 있다.

 

가장 좋은 Weight를 찾으려면 Epoch 값을 얼마로 설정해야할까.

이때 우리는 Keras에서 제공하는 ModelCheckpoint라는 Callback 함수를 이용해 모든 Epoch 중 가장 높은 Accuracy를 기록한 모델을 저장할 수 있다.

 

아래는 예시코드이다.

#....모델링을 마친 후....

from tensorflow.keras.callbacks import ModelCheckpoint
import pickle
cp = ModelCheckpoint(filepath = CHECKPOINT_PATH, monitor = 'val_accuracy', 
					 save_best_only = True, verbose = 1)
model.compile(optimizer=Adam(lr=.0001), 
			  loss = 'categorical_crossentropy', 
			  metrics = ['accuracy'])

if not os.path.exists(PROJECT_PATH + '/checkpoints/' +model_type + '/'):
  os.makedirs(PROJECT_PATH+ '/checkpoints/' +model_type + '/')
  
history = model.fit(trainGen.flow(X_train, y_train, batch_size = 64),
					batch_size = 64, 
					validation_data = (X_val, y_val), 
                    validation_steps = len(X_val) // 64, 
					callbacks = [cp], epochs = 50 )

ModelCheckpoint의 파라미터들을 설정해주었다.

val_accuracy를 기준으로해서, 가장 좋은 모델만 저장할 것이다.

다음으로, Model을 저장할 경로를 설정하고 만약 그 경로가 없으면 만들어주도록 했다.

그리고 Model을 학습시킬 때, Callback 함수로 ModelCheckpoint를 사용하도록 했다.

 

역시 코드는 조금 다르지만 같은 Callback 함수를 사용한 코드를 직접 캡처한 것이다.

가장 높은 val_accuracy를 기록했을 때 모델이 저장되었다는 문구가 나오고, 그 이후로는 수치가 증가하지 않았다는 문구가 나오는 것을 확인할 수 있다.

728x90