케라스 모델을 저장하고 불러오는 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
반응형
'IT > Machine Learning' 카테고리의 다른 글
pytorch Classifier 튜토리얼 (feat. sklearn, digits, accuracy) (0) | 2023.06.15 |
---|---|
Ray tune 를 사용해서 pytorch hyperparameter 최적화하기 (feat. diabetes) (0) | 2023.06.14 |
Pytorch Linear/MLP Regression 튜토리얼 (feat. sklearn diabetes datasets) (0) | 2023.06.13 |
회귀모델 성능지표 결정계수란? (feat. 기준값, 음수, 조정된 결정계수) (2) | 2021.03.03 |
MLP 파라미터(param) 개수 자세히 알기 (feat. 케라스) (2) | 2020.12.17 |