이번 포스팅에서는 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
이 포스팅을 참고하셔서 좀 더 효율적인 개발을 하실 수 있길 바랍니다.
'ML, DL, RL' 카테고리의 다른 글
[RL] Overview (0) | 2021.05.22 |
---|---|
[RL] Reinforcement Learning Problem (0) | 2021.05.09 |
[DL] SimpleRNN with Keras (0) | 2020.12.05 |
[DL] Image Classification using ResNet with CIFAR-10 Dataset on Keras (0) | 2020.11.15 |
[DL] Image Classification using CNN with CIFAR-10 Dataset on Keras (0) | 2020.11.15 |
댓글