model.save('my_model.h5') 모델 전체를 저장하면 나중에 predit만 할 수 있다.
=>
from tensorflow.keras.models import load_model
new_model = load_model('my_model.h5')
model의 architecture 저장
json_string = model.to_json()
=>
from tensorflow.keras.models import model_from_json
model_json = model_from_json(json_string)
weight만 저장
model.save_weights('my_model_weights.h5')
=>
model.load_weights('my_model_weights.h5')
2.Callback
어떤 함수가 실행 완료되고 나서 실행되는 함수 / 결과에 따라 호출되는 함수
-ModelCheckpoint
from tensorflow.keras.callbacks import ModelCheckpoint
checkpoint_path = "training_1/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
cp_callback = ModelCheckpoint(checkpoint_path, save_weights_only=True, verbose=1)
model.fit(x, y, epochs = 2, validation_split = 1/6, callbacks = [cp_callback]) 으로 직접 callback을 사용할 수 있음
-EarlyStopping
from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', patience=2) //patience:숫자 만큼 epoch이 변하지 개선되지 않으면 멈춘다. (2로 설정시, 2연속 val_loss가 증가하면 train 중지)
model = create_model()
history = model.fit(x, y, epochs = 20, validation_split = 1/6,callbacks = [es], batch_size= 512)
-Learning Rate Scheduler
epoch의 값에 따라 learning_rate가 변하는 함수를 만든다
def my_schedule(epoch, learning_rate=lr):
if epoch < 5:
return lr
else:
return float(lr tf.math.exp(0.1 (5- epoch)))
lr_schedule_custom = LearningRateScheduler(my_schedule)
callback으로 사용 가능
-ReduceLRonPlateau
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=2, verbose=1)
model.fit(x, y, epochs = 20, validation_split = 1/6, callbacks = [lr_schedule_custom, reduce_lr], batch_size=512, shuffle=False)
3.Hyperparameter Tuning
model은
layers, units의 개수로 튜닝 할 수 있다.
optimization은
-underfit일때 optimizer을 adam으로 , learning rate 수정
-overfit일때 L2 coefficients 수정, dropout 0.1~0.5, batch_size는 2의 거듭제곱으로 설정. 사이즈가 클수록 속도가 빠름. eopch으로 early stopping을 일으킨다.