IT/Machine Learning

케라스(keras) 모델 저장(save) 및 불러오는(load) 2가지 방법

엘티엘 2020. 12. 14. 18:57

케라스 모델을 저장하고 불러오는 2가지 방법에 대해서 설명드리겠습니다.

 

모델 만들기

먼저 모델을 만들어야 겠죠? 7개 Layer 로 된 간단한 분류 모델을 만들었습니다.

import tensorflow as tf
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np

iris_data = load_iris()

x = iris_data['data']
y = iris_data['target']

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(32, input_dim=x.shape[1]),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(len(np.unique(y)), activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x, y, batch_size=10, epochs=100, validation_split=0.2)
test_loss, test_acc = model.evaluate(x,  y, verbose=2)

약 0.9 정도의 정확도가 나오네요

 

 

첫번째 방법 - save, load_model

save, load_model 함수를 사용하는 방법입니다.

모델 전체를 파일로 저장하고, 불러오는 방법입니다. 결과는 동일합니다 (정확도 0.9)

model.save('iris.h5')
new_model = tf.keras.models.load_model('iris.h5')

test_loss, test_acc = new_model.evaluate(x,  y, verbose=2)

 

두번째 방법 - save_weigths, load_weights

save_weights, load_weights를 사용하는 방법입니다.

가중치만 파일로 저장하고, 불러오는 방법입니다. 결과는 동일합니다 (정확도 0.9)

model.save_weights('iris_weight')

new_model= tf.keras.models.Sequential([
    tf.keras.layers.Dense(32, input_dim=x.shape[1]),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(len(np.unique(y)), activation='softmax')
])

new_model.load_weights('iris_weight')
test_loss, test_acc = new_model.evaluate(x,  y, verbose=2)

 

두 방법의 차이는?

save, load_model은 모델 전체를 저장하기 때문에, load 이후에 별도로 처리할 필요가 없어 매우 간편합니다.

save_weights, load_weights는 가중치만 저장하기 때문에, 모델 architecture를 동일하게 만들어줘야 되죠. 이미 모델 architecture를 알고 있을때만 사용할 수 있습니다.

아래 파일 사이즈를 비교해 보면 weight 파일이 확실이 더 작은것을 알 수 있습니다.

  • save로 저장한 iris.h5 파일은 79K
  • save_weights로 저장한 iris_weight파일은 40K

 

반응형