亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Kears 使用:通過回調(diào)函數(shù)保存最佳準確率下的模型操作

 更新時間:2020年06月17日 09:33:35   作者:wardenjohn  
這篇文章主要介紹了Kears 使用:通過回調(diào)函數(shù)保存最佳準確率下的模型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1:首先,我給我的MixTest文件夾里面分好了類的圖片進行重命名(因為分類的時候沒有注意導致命名有點不好)

def load_data(path):
 Rename the picture [a tool]
 for eachone in os.listdir(path):
  newname = eachone[7:]
  os.rename(path+"\\"+eachone,path+"\\"+newname)

但是需要注意的是:我們按照類重命名了以后,系統(tǒng)其實會按照圖片來排序。這個時候你會看到同一個類的被排序在了一塊。這個時候你不要慌張,其實這個順序是完全不用擔心的。我們只是需要得到網(wǎng)絡(luò)對某一個圖片的輸出是怎么樣的判斷標簽。這個順序?qū)W(wǎng)絡(luò)計算其權(quán)重完全是沒有任何的影響的

2:我在Keras中使用InceptionV3這個模型進行訓練,訓練模型的過程啥的我在這里就不詳細說了(畢竟這個東西有點像隨記那樣的東西)

我們在Keras的模型里面是可以通過

H.history["val_acc"]
H.history["val_loss"]

來的得到歷史交叉準確率這樣的指標

3:

對于每個epoch,我們都會計算一次val_acc和val_loss,我很希望保留下我最高的val_acc的模型,那該怎么辦呢?

這個時候我就會使用keras的callback函數(shù)

H = model.fit_generator(train_datagen.flow(X_train, Y_train, batch_size=batchsize),
  validation_data=(X_test, Y_test), steps_per_epoch=(X_train.shape[0]) // batchsize,
  epochs=epoch, verbose=1, callbacks=[tb(log_dir='E:\John\log'),
           save_function])

上面的參數(shù)先查查文檔把。這里我就說說我的callbacks

callbacks=[tb(log_dir = 'E\John\log')]

這個是使用tensorboard來可視化訓練過程的,后面是tensorboard的log輸出文件夾的路徑,在網(wǎng)絡(luò)訓練的時候,相對應(yīng)的訓練的狀態(tài)就會保存在這個文件夾下

打開終端,輸入

tensorboard --log_dir <your name of the log dir> --port <the port for tensorboard>

然后輸入終端指示的網(wǎng)址在瀏覽器中打開,就可以在tensorboard中看到你訓練的狀態(tài)了

save_function:

這是一個類的實例化:

class Save(keras.callbacks.Callback):
 def __init__(self):
  self.max_acc = 0.0
 
 def on_epoch_begin(self, epoch, logs=None):
  pass
 
 def on_epoch_end(self, epoch, logs=None):
  self.val_acc = logs["val_acc"]
  if epoch != 0:
   if self.val_acc > self.max_acc and self.val_acc > 0.8:
    model.save("kears_model_"+str(epoch)+ "_acc="+str(self.val_acc)+".h5")
    self.max_acc = self.val_acc
 
save_function = Save()

這里繼承了kears.callbacks.Callback

看看on_epoch_end:

在這個epoch結(jié)束的時候,我會得到它的val_acc

當這個val_acc為歷史最大值的時候,我就保存這個模型

在訓練結(jié)束以后,你就挑出acc最大的就好啦(當然,你可以命名為一樣的,最后的到的模型就不用挑了,直接就是acc最大的模型了)

補充知識:Keras回調(diào)函數(shù)Callbacks使用詳解及訓練過程可視化

介紹

內(nèi)容參考了keras中文文檔

回調(diào)函數(shù)Callbacks

回調(diào)函數(shù)是一組在訓練的特定階段被調(diào)用的函數(shù)集,你可以使用回調(diào)函數(shù)來觀察訓練過程中網(wǎng)絡(luò)內(nèi)部的狀態(tài)和統(tǒng)計信息。通過傳遞回調(diào)函數(shù)列表到模型的.fit()中,即可在給定的訓練階段調(diào)用該函數(shù)集中的函數(shù)。

【Tips】雖然我們稱之為回調(diào)“函數(shù)”,但事實上Keras的回調(diào)函數(shù)是一個類,回調(diào)函數(shù)只是習慣性稱呼

keras.callbacks.Callback()

這是回調(diào)函數(shù)的抽象類,定義新的回調(diào)函數(shù)必須繼承自該類

類屬性:

params:字典,訓練參數(shù)集(如信息顯示方法verbosity,batch大小,epoch數(shù))

model:keras.models.Model對象,為正在訓練的模型的引用

回調(diào)函數(shù)以字典logs為參數(shù),該字典包含了一系列與當前batch或epoch相關(guān)的信息。

目前,模型的.fit()中有下列參數(shù)會被記錄到logs中:

在每個epoch的結(jié)尾處(on_epoch_end),logs將包含訓練的正確率和誤差,acc和loss,如果指定了驗證集,還會包含驗證集正確率和誤差val_acc)和val_loss,val_acc還額外需要在.compile中啟用metrics=[‘a(chǎn)ccuracy']。

在每個batch的開始處(on_batch_begin):logs包含size,即當前batch的樣本數(shù)

在每個batch的結(jié)尾處(on_batch_end):logs包含loss,若啟用accuracy則還包含acc

from keras.callbacks import Callback

功能

History(訓練可視化

keras.callbacks.History()

該回調(diào)函數(shù)在Keras模型上會被自動調(diào)用,History對象即為fit方法的返回值,可以使用history中的存儲的acc和loss數(shù)據(jù)對訓練過程進行可視化畫圖,代碼樣例如下:

history=model.fit(X_train, Y_train, validation_data=(X_test,Y_test),
 batch_size=16, epochs=20)
##或者
#history=model.fit(X_train,y_train,epochs=40,callbacks=callbacks, batch_size=32,validation_data=(X_test,y_test)) 
fig1, ax_acc = plt.subplots()
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.title('Model - Accuracy')
plt.legend(['Training', 'Validation'], loc='lower right')
plt.show()

fig2, ax_loss = plt.subplots()
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Model- Loss')
plt.legend(['Training', 'Validation'], loc='upper right')
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.show()

EarlyStopping

keras.callbacks.EarlyStopping(monitor='val_loss', patience=0, verbose=0, mode='auto')

當監(jiān)測值不再改善時,該回調(diào)函數(shù)將中止訓練

參數(shù)

monitor:需要監(jiān)視的量

patience:當early stop被激活(如發(fā)現(xiàn)loss相比上一個epoch訓練沒有下降),則經(jīng)過patience個epoch后停止訓練。

verbose:信息展示模式

verbose = 0 為不在標準輸出流輸出日志信息

verbose = 1 為輸出進度條記錄

verbose = 2 為每個epoch輸出一行記錄

默認為 1

mode:‘a(chǎn)uto',‘min',‘max'之一,在min模式下,如果檢測值停止下降則中止訓練。在max模式下,當檢測值不再上升則停止訓練。

ModelCheckpoint

該回調(diào)函數(shù)將在每個epoch后保存模型到filepath

filepath可以是格式化的字符串,里面的占位符將會被epoch值和傳入on_epoch_end的logs關(guān)鍵字所填入

例如,filepath若為weights.{epoch:02d-{val_loss:.2f}}.hdf5,則會生成對應(yīng)epoch和驗證集loss的多個文件。

參數(shù)

filename:字符串,保存模型的路徑

monitor:需要監(jiān)視的值

verbose:信息展示模式,0或1

save_best_only:當設(shè)置為True時,將只保存在驗證集上性能最好的模型

mode:‘a(chǎn)uto',‘min',‘max'之一,在save_best_only=True時決定性能最佳模型的評判準則,例如,當監(jiān)測值為val_acc時,模式應(yīng)為max,當檢測值為val_loss時,模式應(yīng)為min。在auto模式下,評價準則由被監(jiān)測值的名字自動推斷。

save_weights_only:若設(shè)置為True,則只保存模型權(quán)重,否則將保存整個模型(包括模型結(jié)構(gòu),配置信息等)

period:CheckPoint之間的間隔的epoch數(shù)

Callbacks中可以同時使用多個以上兩個功能,舉例如下

callbacks = [EarlyStopping(monitor='val_loss', patience=8),
    ModelCheckpoint(filepath='best_model.h5', monitor='val_loss', save_best_only=True)]
history=model.fit(X_train, y_train,epochs=40,callbacks=callbacks, batch_size=32,validation_data=(X_test,y_test))

在樣例中,EarlyStopping設(shè)置衡量標注為val_loss,如果其連續(xù)4次沒有下降就提前停止 ,ModelCheckpoint設(shè)置衡量標準為val_loss,設(shè)置只保存最佳模型,保存路徑為best——model.h5

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倍的學習率常常能獲得較好的效果。該回調(diào)函數(shù)檢測指標的情況,如果在patience個epoch中看不到模型性能提升,則減少學習率

參數(shù)

monitor:被監(jiān)測的量 factor:每次減少學習率的因子,學習率將以lr = lr*factor的形式被減少

patience:當patience個epoch過去而模型性能不提升時,學習率減少的動作會被觸發(fā)

mode:‘a(chǎn)uto',‘min',‘max'之一,在min模式下,如果檢測值觸發(fā)學習率減少。在max模式下,當檢測值不再上升則觸發(fā)學習率減少。

epsilon:閾值,用來確定是否進入檢測值的“平原區(qū)”

cooldown:學習率減少后,會經(jīng)過cooldown個epoch才重新進行正常操作 min_lr:學習率的下限

使用樣例如下:

callbacks_test = [
 keras.callbacks.ReduceLROnPlateau(
 #以val_loss作為衡量標準
 monitor='val_loss',
 # 學習率乘以factor
 factor=0.1,
 # It will get triggered after the validation loss has stopped improving
 # 當被檢測的衡量標準經(jīng)過幾次沒有改善后就減小學習率
 patience=10,
 )
 ]
 model.fit(x, y,epochs=20,batch_size=16,
  callbacks=callbacks_test,
 validation_data=(x_val, y_val))

CSVLogger

keras.callbacks.CSVLogger(filename, separator=',', append=False)

將epoch的訓練結(jié)果保存在csv文件中,支持所有可被轉(zhuǎn)換為string的值,包括1D的可迭代數(shù)值如np.ndarray.

參數(shù)

fiename:保存的csv文件名,如run/log.csv

separator:字符串,csv分隔符

append:默認為False,為True時csv文件如果存在則繼續(xù)寫入,為False時總是覆蓋csv文件

以上這篇Kears 使用:通過回調(diào)函數(shù)保存最佳準確率下的模型操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論