如下所示:
keras.callbacks.ModelCheckpoint(self.checkpoint_path,
verbose=0, save_weights_only=True,mode="max",save_best_only=True),
默認是每一次poch,但是這樣硬盤空間很快就會被耗光.
將save_best_only 設置為True使其只保存最好的模型,值得一提的是其記錄的acc是來自于一個monitor_op,其默認為"val_loss",其實現是取self.best為 -np.Inf. 所以,第一次的訓練結果總是被保存.
mode模式自動為auto 和 max一樣,還有一個min的選項...應該是loss沒有負號的時候用的....
https://keras.io/callbacks/ 瀏覽上面的文檔.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# Print the batch number at the beginning of every batch. batch_print_callback = LambdaCallback( on_batch_begin = lambda batch,logs: print (batch)) # Stream the epoch loss to a file in JSON format. The file content # is not well-formed JSON but rather has a JSON object per line. import json json_log = open ( 'loss_log.json' , mode = 'wt' , buffering = 1 ) json_logging_callback = LambdaCallback( on_epoch_end = lambda epoch, logs: json_log.write( json.dumps({ 'epoch' : epoch, 'loss' : logs[ 'loss' ]}) + '\n' ), on_train_end = lambda logs: json_log.close() ) # Terminate some processes after having finished model training. processes = ... cleanup_callback = LambdaCallback( on_train_end = lambda logs: [ p.terminate() for p in processes if p.is_alive()]) model.fit(..., callbacks = [batch_print_callback, json_logging_callback, cleanup_callback]) |
Keras的callback 一般在model.fit函數使用,由于Keras的便利性.有很多模型策略以及日志的策略.
比如 當loss不再變化時停止訓練
keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto', baseline=None, restore_best_weights=False)
比如日志傳送遠程服務器等,以及自適應的學習率scheduler.
確實很便利....
補充知識:keras callbacks常用功能如ModelCheckpoint、ReduceLROnPlateau,EarlyStopping等
ModelCheckpoint:
keras.callbacks.ModelCheckpoint(filepath,monitor='val_loss',verbose=0,save_best_only=False, save_weights_only=False, mode='auto', period=1)
參數:
filename:字符串,保存模型的路徑(可以將模型的準確率和損失等寫到路徑中,格式如下:)
ModelCheckpoint('model_check/'+'ep{epoch:d}-acc{acc:.3f}-val_acc{val_acc:.3f}.h5',monitor='val_loss')
還可以添加損失值等如
‘loss{loss:.3f}-val_loss{val_loss:.3f}'
monitor:需要檢測的值如測試集損失或者訓練集損失等
save_best_only:當設置為True時,監測值有改進時才會保存當前的模型
verbose:信息展示模式,0或1(當為1時會有如下矩形框的信息提示)
mode:‘auto',‘min',‘max'之一,在save_best_only=True時決定性能最佳模型的評判準則,例如,當監測值為val_acc時,模式應為max,當監測值為val_loss時,模式應為min。在auto模式下,評價準則由被監測值的名字自動推斷。
save_weights_only:若設置為True,則只保存模型權重,否則將保存整個模型
period:CheckPoint之間的間隔的epoch數
參考代碼如下:
在使用時傳遞給fit中callbacks即可
1
2
3
4
5
6
7
8
9
10
|
checkpoint = ModelCheckpoint(log_dir + "ep{epoch: 03d } - loss{loss:. 3f } - val_loss{val_loss:. 3f }.h5", monitor = 'val_loss' , save_weights_only = True , save_best_only = True , period = 1 ) train_history = model.fit_generator(data_generator_wrap(), steps_per_epoch = max ( 1 , num_train / / batch_size), validation_data = data_generator_wrap(), validation_steps = max ( 1 , num_val / / batch_size), epochs = 40 , initial_epoch = 0 ,callbacks = [logging, reduce_lr,checkpoint]) |
ReduceLROnPlateau:
keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0)
當評價指標不在提升時,減少學習率
當學習停滯時,減少2倍或10倍的學習率常常能獲得較好的效果。該回調函數檢測指標的情況,如果在patience個epoch中看不到模型性能提升,則減少學習率
參數
monitor:被監測的量
factor:每次減少學習率的因子,學習率將以lr = lr*factor的形式被減少
patience:當patience個epoch過去而模型性能不提升時,學習率減少的動作會被觸發
mode:‘auto',‘min',‘max'之一,在min模式下,如果檢測值觸發學習率減少。在max模式下,當檢測值不再上升則觸發學習率減少。
epsilon:閾值,用來確定是否進入檢測值的“平原區”
cooldown:學習率減少后,會經過cooldown個epoch才重新進行正常操作
min_lr:學習率的下限
參考代碼如下:
1
2
3
4
|
reduce_lr = ReduceLROnPlateau(monitor = 'val_loss' , factor = 0.1 , patience = 3 , verbose = 1 ) train_history = model.fit(data(),validation_data = datae_g(),epochs = 40 ,callbacks = [logging, reduce_lr, checkpoint]) EarlyStopping keras.callbacks.EarlyStopping(monitor = 'val_loss' , patience = 0 , verbose = 0 , mode = 'auto' ) |
當監測值不再改善時,該回調函數將中止訓練
參數
monitor:需要監視的量
patience:當early stop被激活(如發現loss相比上一個epoch訓練沒有下降),則經過patience個epoch后停止訓練。
verbose:信息展示模式
mode:‘auto',‘min',‘max'之一,在min模式下,如果檢測值停止下降則中止訓練。在max模式下,當檢測值不再上升則停止訓練。
以上這篇淺談keras.callbacks設置模型保存策略就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/dayuqi/article/details/85090353