[Keras] EarlyStopping 및 Model 저장하기

2020. 11. 21. 21:11분석 Python/Tensorflow

728x90

리마인드 한다는 개념으로 해보고 있다.

torch를 하다가 keras를 하니까 좀 편한 것 같기도 하다 ㅎㅎㅎ

 

from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint

아래와 같이 EarlyStopping과 ModelCheckpoint를 어떤 것을 모니터링할지를 설정한다.

es = EarlyStopping(monitor='accuracy', mode='max', verbose=1, patience=500)
mc = ModelCheckpoint('best_model.h5', monitor='accuracy', mode='max', save_best_only=True)

모델을 어떻게든 원하는대로 만든다.

이때 compile에서 metrics에 들어가는 것이 바로 EarlyStopping과 ModelCheckpoint의 기준이 된다.

이름을 맞춰주는 것이 중요하다.

model = Sequential()
model.add(Dense(1, input_dim = input_dim,kernel_initializer='lecun_normal'))
model.add(Activation("sigmoid"))
adam = optimizers.Adam(learning_rate=1e-5)
model.compile(loss = keras.losses.BinaryCrossentropy(label_smoothing = 0.0),
              optimizer = adam, metrics =['accuracy'])

그다음에 돌려준다!

callbacks에 위에서 만든 mc,es 를 넣어주면 알아서 저장!

주의 사항은 학습이 끝난 모델은 학습이 끝난 시점의 모델이라는 것이다.

history = model.fit(train, 
                    train_y,
                    callbacks=[es,mc]
                   )

그러므로 학습이 끝나면 최종 모델을 불러온다.

model.load_weights("./best_model.h5")

 

728x90