Tips)케라스(Keras) 학습 완료된 모델 저장 후 재사용을 위한 기본 코드 (그대로 복붙해서 사용가능)
본문 바로가기
Python_basic

Tips)케라스(Keras) 학습 완료된 모델 저장 후 재사용을 위한 기본 코드 (그대로 복붙해서 사용가능)

by Migos 2020. 2. 17.
반응형

케라스를 통해 딥러닝 모델을 학습시켜 저장하는데까지 성공하였다.

그 다음 저장된 모델을 다시 불러와서 학습했던 accuracy나 loss값을 확인해야 하는데, 우여곡절 끝에 다음과 같은 코드를 작성했고, 실제로 정상적으로 모델값을 불러와 학습이 끝난 직후의 값과 동일한 결과를 재차 확인할 수 있었다.

  • 1. 모델을 저장하는 코드(model_save)
  • 2. 모델을 불러오는 코드(model_load)
  • 3. 불러온 모델을 평가하는 코드(model.compile, model.evaluate)

순서로 글을 정리하고 나중에 참고하기 편하게 글을 적어 보았다.

 

모델 예시(10개의 클래스 분류)

1
2
3
4
5
6
7
8
9
10
11
# model
model = Sequential()
model.add(Conv1D(12826, padding='same', input_shape=model_shape))
model.add(LeakyReLU(0.3))
model.add(Conv1D(25626, padding='same'))
model.add(LeakyReLU(0.3))
model.add(Dropout(0.0075))
model.add(Flatten())
model.add(Dense(128))
model.add(LeakyReLU(0.4))
model.add(Dense(10, activation='softmax'))
cs


1. 모델 저장 (Model과 Weight를 각각 나누어 저장)

1
2
3
4
5
6
7
8
9
# Save model
model_json = model.to_json()
with open("model.json""w") as json_file : 
    json_file.write(model_json)
    
# Save model weights
model.save_weights("model_weight.h5")
print("Saved model to disk")
 
cs

 

2. 모델 불러오기 (Model과 Weight를 각각 불러오기)

1
2
3
4
5
6
7
8
9
10
# model load
from keras.models import model_from_json 
json_file = open("model.json""r")
loaded_model_json = json_file.read() 
json_file.close()
loaded_model = model_from_json(loaded_model_json)
 
# model weight load 
model.load_weights("model_weight.h5")
print("Loaded model from disk")
cs

3. 모델 평가하기 (x_train, y_train, x_val, y_val, x_total, y_total은 본인 데이터셋에 맞게 수정, model.compile꼭 해줘야함)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# evaluate
model.compile(loss='categorical_crossentropy', optimizer=Adam(0.0000045), metrics=['accuracy'])
train_score = model.evaluate(x_train, y_train, verbose=0)
val_score = model.evaluate(x_val, y_val, verbose=0)
total_mean_score = model.evaluate(x_total, y_total, verbose=0)
 
print('training loss : ' + str(train_score[0]))
print('validation loss : ' + str(val_score[0]))
 
print('training accuracy : ' + str(train_score[1]))
print('validation accuracy : ' + str(val_score[1]))
 
print('total loss : ' + str(total_mean_score[0]))
print('total accuracy : ' + str(total_mean_score[1]))
cs

 

#keras model.compile(), #keras model.evaluate(), #keras model.load_weights()

반응형

댓글