반응형

케라스, 학습 모델을 파일에 저장하기, 읽어오기

 

글. 오상문 sualchi@daum.net

 

케라스에서 만든 모델을 재사용하기 위해서 파일에 저장할 수 있다.

아래 코드처럼 저장할 파일을 지정하여 저장한다.

 

model.save('파일경로및이름.h5')

 

사용 중인 모델이 필요없으면 아래 코드를 이용하여 제거할 수 있다.


del model

 

파일에 저장한 모델을 가져오려면 다음처럼 읽어올 모델 파일을 지정한다.


model = keras.models.load_model('파일경로및이름.h5')

 

 

아래 예제는 생성한 모델을 파일에 저장하고, 모델을 제거했다가 파일에서 다시 읽어온다.

#--------------------------------------------------------------------

from tensorflow import keras
from tensorflow.keras import layers

 

# 모델 생성
inputs = keras.Input(shape=(784,), name='img')

 

x = layers.Dense(64, activation='relu')(inputs)
x = layers.Dense(64, activation='relu')(x)
outputs = layers.Dense(10, activation='softmax')(x)


model = keras.Model(inputs=inputs, outputs=outputs, name='mnist_model')

 

# MNIST 데이터는 숫자 손글씨 자료 데이터이다
(x_train,y_train), (x_test,y_test) = keras.datasets.mnist.load_data()

x_train = x_train.reshape(60000, 784).astype('float32') / 255
x_test = x_test.reshape(10000, 784).astype('float32') / 255

model.compile(loss='sparse_categorical_crossentropy',
              optimizer=keras.optimizers.RMSprop(),
              metrics=['accuracy'])

history = model.fit(x_train, y_train,
                    batch_size=64,
                    epochs=5,
                    validation_split=0.2)

test_scores = model.evaluate(x_test, y_test, verbose=0)

 

print('Test loss:', test_scores[0])
print('Test accuracy:', test_scores[1])

 

# 모델 저장 
model.save(r"c:\temp\mymodel.h5")  # 'c:/temp/mymodel.h5'

 

# 모델 제거
del model  

 

# 모델 읽어오기
model = keras.models.load_model(r'c:\temp\mymodel.h5') # 'c:/temp/mymodel.h5'

 

# 모델 정보 출력
model.summary()

 

 

[실행 결과]

먼저, MNIST 데이터가 없으면 다운로드 작업을 한 후에 다음 과정이 진행된다.

 

Train on 48000 samples, validate on 12000 samples
Epoch 1/5
48000/48000 [==============================] - 8s 160us/sample - loss: 0.3546 - acc: 0.8990 - val_loss: 0.1982 - val_acc: 0.9428
Epoch 2/5
48000/48000 [==============================] - 7s 151us/sample - loss: 0.1638 - acc: 0.9513 - val_loss: 0.1417 - val_acc: 0.9588
Epoch 3/5
48000/48000 [==============================] - 7s 152us/sample - loss: 0.1203 - acc: 0.9635 - val_loss: 0.1200 - val_acc: 0.9649
Epoch 4/5
48000/48000 [==============================] - 8s 156us/sample - loss: 0.0952 - acc: 0.9722 - val_loss: 0.1176 - val_acc: 0.9658
Epoch 5/5
48000/48000 [==============================] - 8s 157us/sample - loss: 0.0802 - acc: 0.9751 - val_loss: 0.1086 - val_acc: 0.9679
Test loss: 0.10558185985079035
Test accuracy: 0.9699

 

---------------------------------------------------------
Model: "mnist_model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #  
=================================================================
img (InputLayer)             [(None, 784)]             0        
_________________________________________________________________
dense_3 (Dense)              (None, 64)                50240    
_________________________________________________________________
dense_4 (Dense)              (None, 64)                4160     
_________________________________________________________________
dense_5 (Dense)              (None, 10)                650      
=================================================================
Total params: 55,050
Trainable params: 55,050
Non-trainable params: 0
_________________________________________________________________

 

<이상>

반응형

+ Recent posts