꾸준하고 즐겁게
Keras의 ModelCheckpoint 본문
ModelCheckpoint 사용 목적
keras.io/api/callbacks/model_checkpoint/
양질의 데이터를 가져다 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를 기록했을 때 모델이 저장되었다는 문구가 나오고, 그 이후로는 수치가 증가하지 않았다는 문구가 나오는 것을 확인할 수 있다.
'Machine Learning' 카테고리의 다른 글
Transfer Learning (0) | 2021.05.03 |
---|---|
Keras의 ImageDataGenerator 클래스 (0) | 2021.05.03 |
Keras 라이브러리를 활용해 작성한 사용자 정의 Callback 함수 (0) | 2021.04.30 |
Learning Curve를 통해 Overfitting 확인하기 (0) | 2021.04.30 |
Classification의 문제에서 Compile에 쓰이는 Loss function의 사용 (0) | 2021.04.30 |