모델에 저장할 것
1. model의 구조
2. model의 parameter
model 전체 저장
model.save('~~.h5')
model 불러오기
load_model('~~.h5')
model 구조 저장
json_string=model.to_json()
model 불러오기
model_json=model_from_json(json_string)
model weight만 저장
new_model.save_weights('my_model_weights.h5')
모델 저장할 때 사용되는 콜백함수
1. ModelCheckpoint callback 만들기
from tensorflow.keras.callbacks import ModelCheckpoint
cp_callback = ModelCheckpoint(filepath, save_weights_only=True, ...)
model = create_model()
model.fit( ..., callbacks=[cp_callback])
#이름을 epoch마다 바꿔야 함
checkpoint_path="training_2/cp-{epoch:04d}.ckpt"
checkpoint_dir=os.path.dirname(checkpoint_path)
#4번째 epoch이 저장된 걸 쓰고 싶다면
model.load_weights('./traing_3/cp-0004.ckpt')
loss, acc=model.evaluate(x_test, y_test, verbose=2)
def seed_everything(seed: int=42):
random.seed(seed)
np.random.seed(seed)
os.environ["PYTHONHASHSEED"]=str(seed)
tf.random.set_seed(seed)
seed_everything()
from tensorflow.keras.callbacks import EarlyStopping
EarlyStopping(monitor='val_loss', patience=2, verbose=1) #monitor: early stopping을 결정하는 기준 #patience=2: 2번 연속 val_loss가 증가하면 train 중지
#epoch<5일 때는 원래 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)))
from tensorflow.keras.callbacks import LearningRateScheduler
LearningRateScheduler(my_schedule, verbose=1)
from tensorflow.keras.callbacks import ReduceLROnPlateau
#val_loss가 2번 연속 증가하면 learning rate 감소시킴
ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=2, verbose=1)