01. MNIST 모델 예제
- 딥러닝을 처음 배우는 사람들이 만나게 되는 데이터셋 중 하나인 손으로 쓴 숫자들로 이루어진 이미지 데이터셋
1.데이터 로드 및 전처리
-
02. 모델 저장과 로드
- 모델을 학습시키고 저장을 안한다면 다시 처음 부터 학습을 시켜야함
- 어느정도 학습이 되었다면 추후에 모델을 사용하기 위해 저장할 필요가 있음
- 모델을 저장할때는 save()함수를 사용
- 모델을 다시 불러오는데에는 load_model()함수를 사용
- 모델을 저장하고 로드하는 것에서 중요한 점은 모델 생성시에 Sequencial API or Runctional API를 사용한 경우에는 모델의 저장및 로드가 가능 but Subclasing API방식은 사용할 수 없음
- Subclassing API 방식은 save_weights()와 load_weights()를 이용해 모델의 파라미터만 저장 및 로드하는 것이 가능
- 만약 JSON 형식으로 모델을 저장하려면 to_json()를 사용하여 가능
- JSON 파일로부터 모델을 로드하려면 model_from_json()을 사용
실습
# 모델 저장
model.save('mnist_model.h5')
# 모델 불러오기
loaded_model = models.load_model('mnist_model.h5')
# 로드한 모델로 예측하기
pred_ys2 = loaded_model.predict(x_test)
print(pred_ys2.shape)
print(pred_ys2[0])
->
'''
(10000, 10)
[1.6814009e-05 2.7725261e-07 2.0499426e-04 1.0273759e-03 4.7567480e-07
1.9240513e-05 2.6720942e-10 9.9817955e-01 2.1008995e-05 5.3029525e-04]
'''
# 예측값 시각화 하기
arg_pred = np.argmax(pred_y , axit = 1)
plt.title(f'Predicted label: {arg_pred_y[0]}')
plt.imshow(x_test[0])
plt.show()
# to_json()함수로 모델 저장하기
# 위에서 학습시킨 model의 구조를 json 형식으로 model_json에 저장합니다.
model_json = model.to_json()
# json으로 저장한 모델을 읽어옵니다.
loaded_model = keras.models.model_from_json(model_json)
predictions = loaded_model.predict(x_test)
print(predictions.shape)
print(predictions[0])
'''
(10000, 10)
[1.6814009e-05 2.7725261e-07 2.0499426e-04 1.0273759e-03 4.7567480e-07
1.9240513e-05 2.6720942e-10 9.9817955e-01 2.1008995e-05 5.3029525e-04]
'''
# 시각화
arg_pred = np.argmax(predictions, axis = 1)
plt.title(f'Predicted label: {arg_pred_y[0]}/ Json')
plt.imshow(x_test[0])
plt.show()
03. Callbacks
- fit()함수를 통해 모델을 학습시키는 동안 callbacks 매개변수를 사용하여 학습시작이나 끝에 호출할 객체 리스트를 여러개 지정가능
1. ModelCheckpoint
- 정기적으로 모델의 체크포인트를 저장하고, 문제가 발생할 때 복구하는데 사용
check_point_cb = callbacks.ModelCheckpoint('keras_mnist_model.h5')
history = model.fit(x_train, y_train, epochs=10,
callbacks=[check_point_cb])
# 최상의 모델만을 저장하는 옵션으로 save_best_only=True를 지정
check_point_cb = callbacks.ModelCheckpoint('keras_mnist_model.h5', save_best_only=True)
history = model.fit(x_train, y_train, epochs=10,
validation_data=(x_val, y_val),
callbacks=[check_point_cb])
2. EarlyStopping
- 검증 성능이 한동안 개선되지 않을 경우 학습을 중단할 때 사용
- 'patience'동안 검증 세트에 대한 점수가 오르지 않으면 학습을 멈추게 됨
- 모델이 향상되지 않으면 학습이 자동으로 중지되므로 'epochs'숫자를 크게해도 무방
- 학습이 끝난 후의 최상의 가중치를 복원하기 때문에 모델을 따로 복원할 필요가 없음
check_point_cb = callbacks.ModelCheckpoint('keras_mnist_model.h5', save_best_only=True)
early_stopping_cb = callbacks.EarlyStopping(patience=3, monitor='val_loss',
restore_best_weights=True)
history = model.fit(x_train, y_train, epochs=10,
validation_data=(x_val, y_val),
callbacks=[check_point_cb, early_stopping_cb])
3. LearningRateScheduler
- 최적화를 하는 동안 학습률을 동적으로 변경할 때 사용
# 에폭 수가 10 미만일 경우는 학습률을 그대로 하고, 10 이상이 되면 -0.1%씩 감소시키는 코드
def scheduler(epoch, learning_rate):
if epoch < 10:
return learning_rate
else:
return learning_rate * tf.math.exp(-0.1)
round(model.optimizer.lr.numpy(), 5)
lr_scheduler_cb = callbacks.LearningRateScheduler(scheduler)
history = model.fit(x_train, y_train, epochs=15,
callbacks=[lr_scheduler_cb], verbose=0)
round(model.optimizer.lr.numpy(), 5)
4. Tensorboard
- 모델의 경과를 모니터링 할 때 사용
- 텐서보드를 이용하여 학습과정을 모니터링하기 위해서는 logs폴더를 만들고, 학습이 진행되는 동안 로그 파일을 생성
- 텐서보드에는 효율적인 모니터링을 위해서 여러가지 기능들을 제공
log_dir = './logs'
tensor_board_cb = [callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1, write_graph=True, write_images=True)]
model.fit(x_train, y_train, batch_size=32, validation_data=(x_val, y_val),
epochs=30, callbacks=tensor_board_cb)
%load_ext tensorboard
%tensorboard --logdir {log_dir}
'TIL(Today I Learned)' 카테고리의 다른 글
NOTION 노션 slice()함수 에러,ERROR : text 유형의 인수가 slice() 함수를 만족하지 않습니다. (0) | 2025.02.21 |
---|---|
[python] 파이썬 슬라이싱 기본 개념 (0) | 2024.09.26 |
K-means (0) | 2023.09.16 |
클러스터링 (0) | 2023.09.15 |
정보이론 / 엔트로피 (0) | 2023.09.13 |