Open danbi5228 opened 1 year ago
model = keras.models.Sequential([...])
model.compile([...])
model.fit([...])
model.save("my_keras_model.h5")
save()
메서드는 기본적으로 SavedModel
포맷으로 저장함. 파일의 확장자가 '.h5'이거나 save_format
매개변수를 'h5'로 지정하면 HDF5 포맷을 사용함model = keras.models.load_model("my_keras_model.h5")
save_weights()
와 load_weights()
메서드를 사용하여 모델 파라미터를 저장하고 복원할 수 있음fit()
메서드에서 체크포인트를 저장하려면 콜백 (callback) 사용
save_weights()
메서드는 기본적으로 체크포인트 포맷을 사용하여 모델 파라미터를 저장함이런 장점에도 불구하고, 명령형 프로그래밍 스타일이 필요한 경우가 있다면 서브클래싱 API를 사용하는 것을 권장
class WideAndDeepModel(keras.Model):
def __init__(self, units=30, activation="relu", **kwargs):
super().__init__(**kwargs) # 표준 매개변수 처리
self.hidden1 = keras.layers.Dense(units, activation=activation)
self.hidden2 = keras.layers.Dense(units, activation=activation)
self.main_output = keras.layers.Dense(1)
self.aux_output = keras.layers.Dense(1)
def call(self, inputs): input_A, input_B = inputs hidden1 = self.hidden1(input_B) hidden2 = self.hidden1(hidden1) concat = keras.layers.concatenate([input_A, hidden2]) main_output = self.main_output(concat) aux_output = self.aux_output(hidden2) return main_output, aux_output
model = WideAndDeepModel()
- 함수형 API와 흡사하지만 Input 클래스의 객체를 만드는 대신 call 메서드의 input 매개변수를 사용함
- call() 메서드 안에서 원하는 어떤 계산도 가능함
- for문, if문, 텐서플로 저수준 연산을 사용할 수 있음
- but, 모델구조가 call() 메서드 안에 숨겨져 있으므로 케라스가 쉽게 분석할 수 없음. 즉, 모델을 저장하거나 복사할 수 없음
또한 케라스 타입과 크기를 미리 확인할 수 없어서 실수가 발생하기 쉬움
- 높은 유연성이 필요하지 않는다면 서브클래싱 API 사용을 권장하지 않음. 시퀀셜 API와 함수형 API 사용권장!
fit() 메서드의 callbacks 매개변수를 사용하여 훈련 시작이나 끝에 호출할 객체 리스트 지정 가능
ModelCheckpoint는 훈련 동안 일정 간격으로 모델의 체크포인트를 저장
매 에포크 끝에서 호출
# 모델을 만들고 컴파일하기
checkpoint_cb = keras.callbacks.ModelCheckpoint("my_keras_model.h5")
history = model.fit(X_train, y_train, epochs=10, callbacks=[checkpoint_cb])
save_best_only = True를 지정하면 최상의 검증 세트 점수에서만 모델을 저장
오래 훈련하더라도 과대적합을 걱정하지 않고 마지막에 저장된 모델을 복원
checkpoint_cb = keras.callbacks.ModelCheckpoint("my_keras_model.h5", save_best_only=True)
history = model.fit(X_train, y_train, epochs=10,
validation_data=(X_valid, y_valid),
callbacks=[checkpoint_cb])
model = keras.models.load_model("my_keras_model.h5") # 최상의 모델로 롤백
조기 종료를 위해 EarlyStopping 콜백도 사용 가능
patience 동안 검증 세트 점수가 향상되지 않으면 훈련을 멈춤
최상의 모델 복원
최상의 가중치를 복원하기 때문에 저장된 모델 복원 필요 없음
early_stopping_cb = keras.callbacks.EarlyStopping(patience=10,
restore_best_weights=True)
history = model.fit(X_train, y_train, epochs=100,
validation_data=(X_valid, y_valid),
callbacks=[checkpoint_cb, early_stopping_cb])
사용자 정의 콜백도 만들 수 있음
다음은 검증 손실과 훈련 손실의 비율을 출력 (즉, 과대 적합을 감지)
class PrintValTrainRatioCallback(keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs):
print("\nval/train: {:.2f}".format(logs["val_loss"] / logs["loss"]))