https://cloud.tencent.com/developer/article/1010815
8.更科學地模型訓練與模型保存
filepath = 'model-ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5' checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='min') # fit model model.fit(x, y, epochs=20, verbose=2, callbacks=[checkpoint], validation_data=(x, y))
save_best_only打開之后,會如下:
ETA: 3s - loss: 0.5820Epoch 00017: val_loss did not improve
如果val_loss 提高了就會保存,沒有提高就不會保存。
ModelCheckpoint
keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)
該回調函數將在每個epoch后保存模型到filepath
filepath
可以是格式化的字符串,里面的占位符將會被epoch
值和傳入on_epoch_end
的logs
關鍵字所填入
例如,filepath
若為weights.{epoch:02d-{val_loss:.2f}}.hdf5
,則會生成對應epoch和驗證集loss的多個文件。
參數
-
filename:字符串,保存模型的路徑
-
monitor:需要監視的值
-
verbose:信息展示模式,0或1
-
save_best_only:當設置為
True
時,將只保存在驗證集上性能最好的模型 -
mode:‘auto’,‘min’,‘max’之一,在
save_best_only=True
時決定性能最佳模型的評判准則,例如,當監測值為val_acc
時,模式應為max
,當檢測值為val_loss
時,模式應為min
。在auto
模式下,評價准則由被監測值的名字自動推斷。 -
save_weights_only:若設置為True,則只保存模型權重,否則將保存整個模型(包括模型結構,配置信息等)
-
period:CheckPoint之間的間隔的epoch數。
9.如何在keras中使用tensorboard
1 RUN = RUN + 1 if 'RUN' in locals() else 1 # locals() 函數會以字典類型返回當前位置的全部局部變量。 2 3 LOG_DIR = model_save_path + '/training_logs/run{}'.format(RUN) 4 LOG_FILE_PATH = LOG_DIR + '/checkpoint-{epoch:02d}-{val_loss:.4f}.hdf5' # 模型Log文件以及.h5模型文件存放地址 5 6 tensorboard = TensorBoard(log_dir=LOG_DIR, write_images=True) 7 checkpoint = ModelCheckpoint(filepath=LOG_FILE_PATH, monitor='val_loss', verbose=1, save_best_only=True) 8 early_stopping = EarlyStopping(monitor='val_loss', patience=5, verbose=1) 9 10 history = model.fit_generator(generator=gen.generate(True), steps_per_epoch=int(gen.train_batches / 4), 11 validation_data=gen.generate(False), validation_steps=int(gen.val_batches / 4), 12 epochs=EPOCHS, verbose=1, callbacks=[tensorboard, checkpoint, early_stopping])
都是在回調函數中起作用:
-
EarlyStopping patience:當early
(1)stop被激活(如發現loss相比上一個epoch訓練沒有下降),則經過patience個epoch后停止訓練。
(2)mode:‘auto’,‘min’,‘max’之一,在min模式下,如果檢測值停止下降則中止訓練。在max模式下,當檢測值不再上升則停止訓練。 -
模型檢查點ModelCheckpoint
(1)save_best_only:當設置為True時,將只保存在驗證集上性能最好的模型
(2) mode:‘auto’,‘min’,‘max’之一,在save_best_only=True時決定性能最佳模型的評判准則,例如,當監測值為val_acc時,模式應為max,當檢測值為val_loss時,模式應為min。在auto模式下,評價准則由被監測值的名字自動推斷。
(3)save_weights_only:若設置為True,則只保存模型權重,否則將保存整個模型(包括模型結構,配置信息等)
(4)period:CheckPoint之間的間隔的epoch數 - 可視化tensorboard write_images: 是否將模型權重以圖片的形式可視化
其他內容可參考keras中文文檔