- TensorFlow - 구글 머신러닝 플랫폼
- 1. 텐서 기초 살펴보기
- 2. 간단한 신경망 만들기
- 3. 손실 함수 살펴보기
- 4. 옵티마이저 사용하기
- 5. AND 로직 연산 학습하기
- 6. 뉴런층의 속성 확인하기
- 7. 뉴런층의 출력 확인하기
- 8. MNIST 손글씨 이미지 분류하기
- 9. Fashion MNIST 이미지 분류하기
- 10. 합성곱 신경망 사용하기
- 11. 말과 사람 이미지 분류하기
- 12. 고양이와 개 이미지 분류하기
- 13. 이미지 어그멘테이션의 효과
- 14. 전이 학습 활용하기
- 15. 다중 클래스 분류 문제
- 16. 시냅스 가중치 얻기
- 17. 시냅스 가중치 적용하기
- 18. 모델 시각화하기
- 19. 훈련 과정 시각화하기
- 20. 모델 저장하고 복원하기
- 21. 시계열 데이터 예측하기
- 22. 자연어 처리하기 1
- 23. 자연어 처리하기 2
- 24. 자연어 처리하기 3
- 25. Reference
- tf.cast
- tf.constant
- tf.keras.activations.exponential
- tf.keras.activations.linear
- tf.keras.activations.relu
- tf.keras.activations.sigmoid
- tf.keras.activations.softmax
- tf.keras.activations.tanh
- tf.keras.datasets
- tf.keras.layers.Conv2D
- tf.keras.layers.Dense
- tf.keras.layers.Flatten
- tf.keras.layers.GlobalAveragePooling2D
- tf.keras.layers.InputLayer
- tf.keras.layers.ZeroPadding2D
- tf.keras.metrics.Accuracy
- tf.keras.metrics.BinaryAccuracy
- tf.keras.Sequential
- tf.linspace
- tf.ones
- tf.random.normal
- tf.range
- tf.rank
- tf.TensorShape
- tf.zeros
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
20. 모델 저장하고 복원하기¶
학습이 이루어진 모델을 저장하고 복원할 수 있습니다.
케라스는 HDF5 (.h5) 표준 포맷을 제공해서, 모델의 가중치, 모델 구성, 옵티마이저 설정까지 저장합니다.
저장한 모델을 TensorFlow.js로 불러와서 웹 브라우저에서 모델을 다시 훈련하고 실행하거나, 모바일 장치에 맞도록 변환해서 사용할 수 있습니다.
아래의 MNIST 손글씨 이미지 인식 예제에서 save()와 load_model() 메서드의 사용에 대해 알아봅니다.
모델 저장¶
예제¶
import tensorflow as tf
# 1. MNIST 데이터넷 임포트
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 2. 데이터 전처리
x_train, x_test = x_train/255.0, x_test/255.0
# 3. 모델 구성
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
# 4. 모델 컴파일
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 5. 모델 훈련
model.fit(x_train, y_train, epochs=5)
# 6. 모델 저장
model.save('model1.h5')
Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 7s 119us/sample - loss: 0.2002 - accuracy: 0.9414
Epoch 2/5
60000/60000 [==============================] - 7s 123us/sample - loss: 0.0798 - accuracy: 0.9754
Epoch 3/5
60000/60000 [==============================] - 6s 107us/sample - loss: 0.0518 - accuracy: 0.9835
Epoch 4/5
60000/60000 [==============================] - 6s 104us/sample - loss: 0.0384 - accuracy: 0.9872
Epoch 5/5
60000/60000 [==============================] - 6s 106us/sample - loss: 0.0259 - accuracy: 0.9914
5회의 에포크 동안 학습이 이루어진 모델을 save() 메서드를 이용해서 저장했습니다.
이제 ‘model1.h5’ 파일이 생성됩니다.
모델 복원하기¶
예제¶
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train/255.0, x_test/255.0
# 모델 복원
loaded_model = tf.keras.models.load_model('model1.h5')
loaded_model.summary()
loss, acc = loaded_model.evaluate(x_test, y_test, verbose=2)
print('Loss: ', loss)
print('Acc: ', acc)
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
_________________________________________________________________
dense (Dense) (None, 512) 401920
_________________________________________________________________
dense_1 (Dense) (None, 10) 5130
=================================================================
Total params: 407,050
Trainable params: 407,050
Non-trainable params: 0
_________________________________________________________________
10000/1 - 1s - loss: 0.0348 - accuracy: 0.9807
Loss: 0.06882412914167507
Acc: 0.9807
load_model() 메서드를 이용해서 저장한 모델 (‘model1.h5’)을 불러왔습니다.
summary()를 이용해서 모델에 대한 정보를 확인합니다.
그리고 evaluate()를 이용해서 이전의 훈련의 결과를 확인합니다.
공식 문서에 의하면, 모델의 구조를 저장할 수 있지만 모델을 로드한 후에 다시 컴파일 해야합니다.
즉, 옵티마이저의 상태는 유지되지 않습니다.
이전글/다음글
이전글 : 19. 훈련 과정 시각화하기
다음글 : 21. 시계열 데이터 예측하기