官網(wǎng)解釋
回調(diào)函數(shù)是一組在訓(xùn)練的特定階段被調(diào)用的函數(shù)集,你可以使用回調(diào)函數(shù)來觀察訓(xùn)練過程中網(wǎng)絡(luò)內(nèi)部的狀態(tài)和統(tǒng)計(jì)信息。通過傳遞回調(diào)函數(shù)列表到模型的.fit()中,即可在給定的訓(xùn)練階段調(diào)用該函數(shù)集中的函數(shù)。
ModelCheckpoint:
該回調(diào)函數(shù)將在每個(gè)epoch后保存模型到filepath
keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss',
verbose=0, save_best_only=False,
save_weights_only=False, mode='auto', period=1)
- filepath:字符串,保存模型的路徑和名稱。
- monitor='val_loss':需要監(jiān)視的值。默認(rèn)是驗(yàn)證集損失。
- verbose=0:信息展示模式,0或1。
- save_best_only=False:當(dāng)設(shè)置為True時(shí),將只保存在驗(yàn)證集上性能最好的模型。
- save_weights_only=False:若設(shè)置為True,則只保存模型權(quán)重,否則將保存整個(gè)模型(包括模型結(jié)構(gòu),配置信息等)。
- mode:‘a(chǎn)uto’,‘min’,‘max’之一,在save_best_only=True時(shí)決定性能最佳模型的評(píng)判準(zhǔn)則,例如,當(dāng)監(jiān)測(cè)值為val_acc時(shí),模式應(yīng)為max,當(dāng)檢測(cè)值為val_loss時(shí),模式應(yīng)為min。在auto模式下,評(píng)價(jià)準(zhǔn)則由被監(jiān)測(cè)值的名字自動(dòng)推斷。
- period=1:CheckPoint之間的間隔的epoch數(shù)。(epoch指整個(gè)數(shù)據(jù)集(所有batch全部更新完1次)被訓(xùn)練的輪次)。
ReduceLROnPlateau:
當(dāng)學(xué)習(xí)停滯時(shí),減少2倍或10倍的學(xué)習(xí)率常常能獲得較好的效果。該回調(diào)函數(shù)檢測(cè)指標(biāo)的情況,如果在patience個(gè)epoch中看不到模型性能提升,則減少學(xué)習(xí)率。學(xué)習(xí)率對(duì)模型訓(xùn)練的影響解釋
keras.callbacks.ReduceLROnPlateau(monitor='val_loss',
factor=0.1, patience=10, verbose=0, mode='auto',
epsilon=0.0001, cooldown=0, min_lr=0)
- monitor:被監(jiān)測(cè)的量。默認(rèn)是val_loss
- factor:每次減少學(xué)習(xí)率(lr)的因子,學(xué)習(xí)率將以lr = lr*factor的形式被減少
- patience:當(dāng)patience個(gè)epoch過去而模型性能不提升時(shí),學(xué)習(xí)率減少的動(dòng)作會(huì)被觸發(fā)
- mode:‘a(chǎn)uto’,‘min’,‘max’之一,如果觀測(cè)值是val_loss,那么當(dāng)它不再減少(對(duì)應(yīng)min)時(shí)改變lr
- epsilon:閾值,用來確定是否進(jìn)入檢測(cè)值的“平原區(qū)”。
- cooldown:學(xué)習(xí)率減少后,會(huì)經(jīng)過cooldown個(gè)epoch才重新進(jìn)行正常操作
- min_lr:學(xué)習(xí)率的下限
EarlyStopping:
當(dāng)監(jiān)測(cè)值monitor不再改善時(shí),該回調(diào)函數(shù)將中止訓(xùn)練
keras.callbacks.EarlyStopping(monitor='val_loss', patience=0,
verbose=0, mode='auto')
- monitor:需要監(jiān)視的量
- patience:當(dāng)early stop被激活(如發(fā)現(xiàn)loss相比上一個(gè)epoch訓(xùn)練沒有下降),則經(jīng)過patience個(gè)epoch后停止訓(xùn)練。
- verbose:信息展示模式
- mode:‘a(chǎn)uto’,‘min’,‘max’之一,在min模式下,如果檢測(cè)值停止下降則中止訓(xùn)練。在max模式下,當(dāng)檢測(cè)值不再上升則停止訓(xùn)練。
yolov3代碼->train.py涉及到的:
ModelCheckpoint:
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=3)
參數(shù)解釋:
- filepath=log_dir + 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5'。保存的權(quán)值名字。
- monitor='val_loss', 檢測(cè)val_loss的值。
- save_weights_only=True, 只保留模型權(quán)值
- save_best_only=True, 只保留性能最好的模型
- period=3。每3個(gè)epoch進(jìn)行一次CheckPoint。
ReduceLROnPlateau:
reduce_lr = ReduceLROnPlateau(monitor='val_loss',
factor=0.1, patience=3, verbose=1)
參數(shù)解釋:
- monitor='val_loss', 監(jiān)測(cè)val_loss。如果在patience個(gè)epoch中val_loss沒有下降,那么改變lr。
- factor=0.1, lr=lr*0.1
- patience=3, 持續(xù)三個(gè)epoch。
- verbose=1。
EarlyStopping:
early_stopping = EarlyStopping(monitor='val_loss',
min_delta=0, patience=10, verbose=1)
參數(shù)解釋:
- monitor='val_loss', 監(jiān)測(cè)值
- min_delta=0,
- patience=10, 如發(fā)現(xiàn)loss相比上一個(gè)epoch訓(xùn)練沒有下降,則經(jīng)過10個(gè)epoch后停止訓(xùn)練。說明模型存在過擬合問題。
- verbose=1