본문 바로가기
ML, DL, RL

[DL] Save and Load model on Keras

by llHoYall 2021. 4. 5.

이번 포스팅에서는 Keras를 이용해서 훈련한 모델을 저장하고 다시 불러와서 사용하는 방법을 알아보겠습니다.

일단 모델이 필요하니, 이전에 만들어 두었던 모델을 한 번 활용해 봅시다.

2020.11.10 - [DeepLearning] - Classifying Handwriting with Keras

Save and Load Weights

먼저 가중치를 저장하고 불러오는 것을 알아보겠습니다.

 

다음의 코드를 사용하면 간단하게 우리가 훈련시킨 가중치들을 따로 저장을 할 수가 있습니다.

model.save_weights('weights.h5')

각자 원하는 이름을 사용하시면 해당 이름으로 저장이 됩니다.

참고로 h5 확장자를 사용할 경우 HDF5 format을 사용하여 저장됩니다.

 

저장된 가중치를 불러와 모델에 적용시키려면 다음의 코드를 사용해보세요.

model.load_weights('weights.h5')

단, 적용을 하려는 모델은 저장한 모델과 동일한 구조를 갖고 있어야 합니다.

이 점만 유의하면 따로 훈련하지 않고도 기존에 훈련했던 값들을 바로 불러와서 모델에 적용할 수 있어요. ^^

Save and Load Model

가중치만 저장을 할 경우 파일의 크기가 작긴 하지만, 모델 구조를 항상 기억하고 있어야 한다는 어려움이 있어요.

그럴 경우 지금 설명하는 내용을 한 번 적용해보세요. 이 방법은 모델과 훈련된 파라미터를 모두 다 저장해요.

model.save('model.h5')

마찬가지로 원하는 이름으로 저장할 수 있어요.

 

사용은 다음과 같이 합니다.

model = keras.models.load_model('model.h5')

모델을 저장했으니, 불러와서 모델에 넣어줘야겠죠? ^^

테스트 해보시면 당연하게 저장된 모델과 동일한 결과를 얻으실 수 있어요.

요걸 사용하면 매번 새로 학습시킬 필요가 없죠.

Save Model using Callback

보통 최적의 모델을 만들어낼 때는 여러가지 하이퍼파라미터들을 조절해가며 훈련시켜보다가 적당한 값을 찾곤 하죠?

만약, 어떤 하이퍼파라미터를 1~10까지 변경해가면서 테스트를 해봤더니 중간 값 이었던 7이 최적값 이었다면요?

다시 7로 설정 후 훈련을 시키고, 이걸 저장 해야겠죠.

Keras는 이런 번거로움 없이 알아서 최적 모델을 저장하도록 할 수 있는 방법을 제공하고 있습니다.

model_cb = keras.callbacks.ModelCheckpoint('best-model.h5')
history = model.fit(train_images, train_labels, batch_size=500, epochs=5, validation_split=0.2, callbacks=[model_cb])

먼저, 콜백 함수를 하나 만듭니다. ModelCheckpoint method을 사용하고, 최적 모델을 저장할 파일 이름을 정해줍니다.

다음으로, 훈련 도중 최적 모델을 저장할 수 있도록 이 콜백 함수를 등록해 주면 끝입니다. 'ㅅ'

Early Stopping

마지막으로 하나만 더 알아보도록 해요.

Early stopping이라고 하는 이 콜백 함수는 이름대로 원하는 지표 하나를 모니터링 하다 더이상 개선이 없을 경우 자동으로 학습을 종료하도록 해서, 불필요한 시간 낭비를 줄일 수 있습니다.

model_cb = keras.callbacks.ModelCheckpoint('best-model.h5')
stop_cb = keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True)
history = model.fit(train_images, train_labels, batch_size=500, epochs=100, validation_split=0.2, callbacks=[model_cb, stop_cb])

이것도 역시 콜백 함수를 사용합니다.

EarlyStopping method를 사용하여 만들어줍니다.

patience의 의미는 얼마나 모니터링을 할 것인가 입니다. 다시 말해, 3이라고 설정한 것은 모니터링 하고 있는 지표가 3번 이상 개선이 되지 않으면 멈추라는 의미입니다.

restore_best_weights=True의 의미는 멈춘 후, 최적이었던 값으로 모델의 파라미터 값들을 되돌리라는 뜻입니다.

마지막으로 훈련한 파라미터는 개선이 되지 않았을 것이기 때문에, 당연하게도 최적값이 아닐 것이라 보통 이런 옵션을 넣어줍니다.

Conclusion

이 포스팅을 참고하셔서 좀 더 효율적인 개발을 하실 수 있길 바랍니다.

댓글