最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于keras中的回調(diào)函數(shù)用法說明

 更新時間:2020年06月17日 09:05:41   作者:帥氣的弟八哥  
這篇文章主要介紹了基于keras中的回調(diào)函數(shù)用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

keras訓練

fit(
 self, 
 x, 
 y, 
 batch_size=32, 
 nb_epoch=10, 
 verbose=1, 
 callbacks=[], 
 validation_split=0.0, 
 validation_data=None, 
 shuffle=True, 
 class_weight=None, 
 sample_weight=None
)

1. x:輸入數(shù)據(jù)。如果模型只有一個輸入,那么x的類型是numpy array,如果模型有多個輸入,那么x的類型應當為list,list的元素是對應于各個輸入的numpy array。如果模型的每個輸入都有名字,則可以傳入一個字典,將輸入名與其輸入數(shù)據(jù)對應起來。

2. y:標簽,numpy array。如果模型有多個輸出,可以傳入一個numpy array的list。如果模型的輸出擁有名字,則可以傳入一個字典,將輸出名與其標簽對應起來。

3. batch_size:整數(shù),指定進行梯度下降時每個batch包含的樣本數(shù)。訓練時一個batch的樣本會被計算一次梯度下降,使目標函數(shù)優(yōu)化一步。

4. nb_epoch:整數(shù),訓練的輪數(shù),訓練數(shù)據(jù)將會被遍歷nb_epoch次。Keras中nb開頭的變量均為"number of"的意思

5. verbose:日志顯示,0為不在標準輸出流輸出日志信息,1為輸出進度條記錄,2為每個epoch輸出一行記錄

6. callbacks:list,其中的元素是keras.callbacks.Callback的對象。這個list中的回調(diào)函數(shù)將會在訓練過程中的適當時機被調(diào)用,參考回調(diào)函數(shù)

7. validation_split:0~1之間的浮點數(shù),用來指定訓練集的一定比例數(shù)據(jù)作為驗證集。驗證集將不參與訓練,并在每個epoch結(jié)束后測試的模型的指標,如損失函數(shù)、精確度等。

8. validation_data:形式為(X,y)或(X,y,sample_weights)的tuple,是指定的驗證集。此參數(shù)將覆蓋validation_spilt。

9. shuffle:布爾值,表示是否在訓練過程中每個epoch前隨機打亂輸入樣本的順序。

10. class_weight:字典,將不同的類別映射為不同的權(quán)值,該參數(shù)用來在訓練過程中調(diào)整損失函數(shù)(只能用于訓練)。該參數(shù)在處理非平衡的訓練數(shù)據(jù)(某些類的訓練樣本數(shù)很少)時,可以使得損失函數(shù)對樣本數(shù)不足的數(shù)據(jù)更加關(guān)注。

11. sample_weight:權(quán)值的numpy array,用于在訓練時調(diào)整損失函數(shù)(僅用于訓練)??梢詡鬟f一個1D的與樣本等長的向量用于對樣本進行1對1的加權(quán),或者在面對時序數(shù)據(jù)時,傳遞一個的形式為(samples,sequence_length)的矩陣來為每個時間步上的樣本賦不同的權(quán)。這種情況下請確定在編譯模型時添加了sample_weight_mode='temporal'。

fit函數(shù)返回一個History的對象,其History.history屬性記錄了損失函數(shù)和其他指標的數(shù)值隨epoch變化的情況,如果有驗證集的話,也包含了驗證集的這些指標變化情況。

保存模型結(jié)構(gòu)、訓練出來的權(quán)重、及優(yōu)化器狀態(tài)

keras 的 callback參數(shù)可以幫助我們實現(xiàn)在訓練過程中的適當時機被調(diào)用。實現(xiàn)實時保存訓練模型以及訓練參數(shù)。

keras.callbacks.ModelCheckpoint(
 filepath, 
 monitor='val_loss', 
 verbose=0, 
 save_best_only=False, 
 save_weights_only=False, 
 mode='auto', 
 period=1
)

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

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

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

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

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

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

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

當驗證損失不再繼續(xù)降低時,如何中斷訓練?當監(jiān)測值不再改善時中止訓練

用EarlyStopping回調(diào)函數(shù)

from keras.callbacksimport EarlyStopping 

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

model.fit(X, y, validation_split=0.2, callbacks=[early_stopping])

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

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

3. verbose:信息展示模式

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

學習率動態(tài)調(diào)整1

keras.callbacks.LearningRateScheduler(schedule)

schedule:函數(shù),該函數(shù)以epoch號為參數(shù)(從0算起的整數(shù)),返回一個新學習率(浮點數(shù))

也可以讓keras自動調(diào)整學習率

keras.callbacks.ReduceLROnPlateau(
 monitor='val_loss', 
 factor=0.1, 
 patience=10, 
 verbose=0, 
 mode='auto', 
 epsilon=0.0001, 
 cooldown=0, 
 min_lr=0
)

1. monitor:被監(jiān)測的量

2. factor:每次減少學習率的因子,學習率將以lr = lr*factor的形式被減少

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

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

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

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

7. min_lr:學習率的下限

當學習停滯時,減少2倍或10倍的學習率常常能獲得較好的效果

學習率動態(tài)2

def step_decay(epoch):
 initial_lrate = 0.01
 drop = 0.5
 epochs_drop = 10.0
 lrate = initial_lrate * math.pow(drop,math.floor((1+epoch)/epochs_drop))
 return lrate
lrate = LearningRateScheduler(step_decay)
sgd = SGD(lr=0.0, momentum=0.9, decay=0.0, nesterov=False)
model.fit(train_set_x, train_set_y, validation_split=0.1, nb_epoch=200, batch_size=256, callbacks=[lrate])

如何記錄每一次epoch的訓練/驗證損失/準確度?

Model.fit函數(shù)會返回一個 History 回調(diào),該回調(diào)有一個屬性history包含一個封裝有連續(xù)損失/準確的lists。代碼如下:

hist = model.fit(X, y,validation_split=0.2)
print(hist.history)

Keras輸出的loss,val這些值如何保存到文本中去

Keras中的fit函數(shù)會返回一個History對象,它的History.history屬性會把之前的那些值全保存在里面,如果有驗證集的話,也包含了驗證集的這些指標變化情況,具體寫法

hist=model.fit(train_set_x,train_set_y,batch_size=256,shuffle=True,nb_epoch=nb_epoch,validation_split=0.1)
with open('log_sgd_big_32.txt','w') as f:
 f.write(str(hist.history))

示例,多個回調(diào)函數(shù)用逗號隔開

# checkpoint
checkpointer = ModelCheckpoint(filepath="./checkpoint.hdf5", verbose=1)
# learning rate adjust dynamic
lrate = ReduceLROnPlateau(min_lr=0.00001)

answer.compile(optimizer='rmsprop', loss='categorical_crossentropy',
    metrics=['accuracy'])
# Note: you could use a Graph model to avoid repeat the input twice
answer.fit(
 [inputs_train, queries_train, inputs_train], answers_train,
 batch_size=32,
 nb_epoch=5000,
 validation_data=([inputs_test, queries_test, inputs_test], answers_test),
 callbacks=[checkpointer, lrate]
)

keras回調(diào)函數(shù)中的Tensorboard

keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, 
   write_graph=True, write_images=True)

tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
...
model.fit(...inputs and parameters..., callbacks=[tbCallBack])
tensorboard --logdir path_to_current_dir/Graph 

或者

from keras.callbacks import TensorBoard

tensorboard = TensorBoard(log_dir='./logs', histogram_freq=0,
       write_graph=True, write_images=False)
# define model
model.fit(X_train, Y_train,
   batch_size=batch_size,
   epochs=nb_epoch,
   validation_data=(X_test, Y_test),
   shuffle=True,
   callbacks=[tensorboard])

補充知識:Keras中的回調(diào)函數(shù)(callback)的使用與介紹

以前我在訓練的時候,都是直接設(shè)定一個比較大的epoch,跑完所有的epoch之后再根據(jù)數(shù)據(jù)去調(diào)整模型與參數(shù)。這樣做會比較耗時,例如說訓練在某一個epoch開始已經(jīng)過擬合了,后面繼續(xù)訓練意義就不大了。

在書上看到的callback函數(shù)很好的解決了這個問題,它能夠監(jiān)測訓練過程中的loss或者acc這些指標,一旦觀察到損失不再改善之后,就可以中止訓練,節(jié)省時間。下面記錄一下

介紹:

(選自《python深度學習》)

回調(diào)函數(shù)(callback)是在調(diào)用fit時傳入模型的一個對象,它在訓練過程中的不同時間點都會被模型調(diào)用。它可以訪問關(guān)于模型狀態(tài)與性能的所有可用數(shù)據(jù),還可以采取行動:中斷訓練、保存模型、加載一組不同的權(quán)重或改變模型的狀態(tài)。

部分回調(diào)函數(shù):

1.ModelCheckpoint與EarlyStopping

監(jiān)控目標若在指定輪數(shù)內(nèi)不再改善,可利用EarlyStopping來中斷訓練。

可配合ModelCheckpoint使用,該回調(diào)函數(shù)可不斷地保存模型,亦可以只保存某一epoch最佳性能模型

import keras
callbacks_list=[
 keras.callbacks.EarlyStopping(
  monitor='acc',#監(jiān)控精度
  patience=5,#5輪內(nèi)不改善就中止
),
 keras.callbacks.ModelCheckpoint(
  filepath='C:/apple/my_model.h5',#模型保存路徑
  monitor='val_loss',#檢測驗證集損失值
  save_best_only=True#是否只保存最佳模型
 )
]
model.compile(optimizer='rmsprop',
    loss='binary_crossentropy',
    metrics=['acc'])
model.fit(x,y,
   epochs=10,
   batch_size=32,
   callbacks=callbacks_list,#在這里放入callback函數(shù)
   validation_data=(x_val,y_val)
 )

2.ReduceLROnPlateau回調(diào)函數(shù)

如果驗證損失不再改善,可以使用該回調(diào)函數(shù)來降低學習率。

import keras
 
callbacks_list=[
 keras.callbacks.ReduceLROnPlateau(
  monitor='val_loss',#監(jiān)控精度
  patienece=5, # 5輪內(nèi)不改善就改變
  factor=0.1#學習率變?yōu)樵瓉淼?.1
)
]
model.compile(optimizer='rmsprop',
    loss='binary_crossentropy',
    metrics=['acc'])
model.fit(x,y,
   epochs=10,
   batch_size=32,
   callbacks=callbacks_list,#在這里放入callback函數(shù)
   validation_data=(x_val,y_val)
 )

以上這篇基于keras中的回調(diào)函數(shù)用法說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python Flask上下文管理機制實例解析

    Python Flask上下文管理機制實例解析

    這篇文章主要介紹了Python Flask上下文管理機制實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Pytorch訓練網(wǎng)絡(luò)過程中l(wèi)oss突然變?yōu)?的解決方案

    Pytorch訓練網(wǎng)絡(luò)過程中l(wèi)oss突然變?yōu)?的解決方案

    這篇文章主要介紹了Pytorch訓練網(wǎng)絡(luò)過程中l(wèi)oss突然變?yōu)?的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Django 開發(fā)環(huán)境與生產(chǎn)環(huán)境的區(qū)分詳解

    Django 開發(fā)環(huán)境與生產(chǎn)環(huán)境的區(qū)分詳解

    這篇文章主要介紹了Django 開發(fā)環(huán)境與生產(chǎn)環(huán)境的區(qū)分詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python實現(xiàn)讀取文件中的特定行的方法詳解

    Python實現(xiàn)讀取文件中的特定行的方法詳解

    這篇文章主要為大家詳細介紹了如何在Python中實現(xiàn)讀取文件中的特定行,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • python字符串的index和find的區(qū)別詳解

    python字符串的index和find的區(qū)別詳解

    這篇文章主要介紹了python字符串的index和find的區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Python正則表達式學習小例子

    Python正則表達式學習小例子

    這篇文章主要介紹了Python正則表達式學習小例子,學習python的朋友可以參考一下
    2020-03-03
  • python中super().__init__()的用法

    python中super().__init__()的用法

    python里的super().__init__()有什么作用?很多同學沒有弄清楚。super()用來調(diào)用父類(基類)的方法,__init__()是類的構(gòu)造方法,感興趣的小伙伴可以參考閱讀本文
    2023-03-03
  • 關(guān)于Python代碼混淆和加密技術(shù)

    關(guān)于Python代碼混淆和加密技術(shù)

    這篇文章主要介紹了關(guān)于Python代碼混淆和加密技術(shù),Python進行商業(yè)開發(fā)時, 需要有一定的安全意識, 為了不被輕易的逆向還原,混淆和加密就有所必要了,需要的朋友可以參考下
    2023-07-07
  • Python實現(xiàn)自動識別并填加驗證碼的示例代碼

    Python實現(xiàn)自動識別并填加驗證碼的示例代碼

    實現(xiàn)自動識別網(wǎng)頁中的驗證碼并填寫,需要結(jié)合使用網(wǎng)絡(luò)爬蟲技術(shù)、圖像識別(OCR),以及可能的瀏覽器自動化工具(如Selenium),本文給大家介紹了Python實現(xiàn)自動識別并填加驗證碼的示例,需要的朋友可以參考下
    2024-06-06
  • 淺析PyTorch中nn.Linear的使用

    淺析PyTorch中nn.Linear的使用

    這篇文章主要介紹了淺析PyTorch中nn.Linear的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08

最新評論

临猗县| 河源市| 车致| 郁南县| 健康| 新田县| 安岳县| 冕宁县| 夹江县| 会昌县| 前郭尔| 会昌县| 甘肃省| 陆河县| 陆河县| 古田县| 多伦县| 新田县| 宝兴县| 成安县| 满洲里市| 大丰市| 金寨县| 柳州市| 江门市| 攀枝花市| 临清市| 阳新县| 乐东| 会昌县| 霍州市| 潍坊市| 和林格尔县| 罗平县| 宣恩县| 永泰县| 肥乡县| 南丰县| 万荣县| 深水埗区| 甘肃省|