모델 저장과 복원
기존 code
In [1]:
import tensorflow as tf
from tensorflow import keras
from tensorflow import keras
(train_input, train_target), (test_input, test_target) =\
keras.datasets.fashion_mnist.load_data()
from sklearn.model_selection import train_test_split
train_scaled = train_input/255.0
train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled, train_target, test_size=0.2, random_state=42)
def model_fn(a_layer=None):
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28, 28)))
model.add(keras.layers.Dense(100, activation='relu', name='hidden'))
if a_layer:
model.add(a_layer)
model.add(keras.layers.Dense(10, activation='softmax', name='output'))
return model
In [3]:
model = model_fn(keras.layers.Dropout(0.3))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics='accuracy')
history = model.fit(train_scaled, train_target, epochs=10, verbose=0, validation_data=(val_scaled, val_target))
keras 모델 => 훈련된 모델의 파라미터를 저장하는 간편한 save_weights() 메서드 제공
- tensorflow의 체크포인트 포멧으로 저장하지만, 파일의 확장자가 '.h5'일 경우 HDF5 포멧으로 저장
- 모델 구조와 모델 파라미터를 함께 저장하는 save() 메서드 제공
In [5]:
model.save_weights('model-weights.h5')
In [7]:
model.save('model-whole.h5')
위의 메서드로 인하여 2가지 파일이 형성.
- save_weights() <==> load_weights()
- 저장했던 모델과 정확히 같은 구조를 가져야 load가 가능하다.
In [10]:
model = model_fn(keras.layers.Dropout(0.3))
model.load_weights('model-weights.h5')
검증 정확도를 확인
- 예측을 수행하는 predict()
- 해당 데이터는 10개의 클래스로 되어 있기에, 10개의 클래스에 대한 확률을 반환
- 패션 MNIST 데이터셋(12000개) => (12000, 10) 크기의 배열을 반환
- 10개 확률 중, 가장 큰 값의 인덱스를 골라 타깃 레이블과 비교하여 정확도 계산
- evaluate() 메서드는 손실을 계산하기 위해, 반드시 먼저 compile() 메서드를 실행
훈련된 모델 파라미터 파일을 읽어서 정확도 확인
In [11]:
import numpy as np
val_labels = np.argmax(model.predict(val_scaled), axis=-1)
print(np.mean(val_labels == val_target))
375/375 [==============================] - 1s 2ms/step
0.8773333333333333
predict() & argmax()
- 모델의 predict() 메서드의 결과에서 가장 큰 값을 고르기 위해 => argmax() 함수: 배열에서 가장 큰 값의 인덱스 반환
- argmax() 함수의 axis=-1은 배열의 마지막 차원을 따라 최대값을 선정
모델 전체를 파일에서 읽은 다음 검증 세트의 정확도를 확인
- load_model() 함수는 모델 파라미터뿐만 아니라 모델구조와 옵티마이저 상태까지 모두 복원, 그러한 이유때문에 evaluate() 사용 가능
In [12]:
model = keras.models.load_model('model-whole.h5')
model.evaluate(val_scaled, val_target)
375/375 [==============================] - 1s 2ms/step - loss: 0.3334 - accuracy: 0.8773
Out[12]:
[0.33335167169570923, 0.8773333430290222]
같은 모델을 저장하고 다시 불러들였기 때문에 위와 동일한 정확도를 얻음.
'책[이해 및 학습]' 카테고리의 다른 글
1. [손글씨 구분] 데이터셋 구하기 (0) | 2024.03.09 |
---|---|
10. [혼자 공부하는 머신러닝/딥러닝] 콜백(callback) (0) | 2024.03.09 |
8. [혼자 공부하는 머신러닝/딥러닝] 드롭아웃 (0) | 2024.03.09 |
7. [혼자 공부하는 머신러닝/딥러닝] 신경망 모델 훈련 (0) | 2024.03.09 |
6. [혼자 공부하는 머신러닝/딥러닝] 옵티마이저 (0) | 2024.03.09 |