1. 程式人生 > 程式設計 >keras中epoch,batch,loss,val_loss用法說明

keras中epoch,batch,loss,val_loss用法說明

1、epoch

Keras官方文件中給出的解釋是:“簡單說,epochs指的就是訓練過程接中資料將被“輪”多少次”

(1)釋義:

訓練過程中當一個完整的資料集通過了神經網路一次並且返回了一次,這個過程稱為一個epoch,網路會在每個epoch結束時報告關於模型學習進度的除錯資訊。

(2)為什麼要訓練多個epoch,即資料要被“輪”多次

在神經網路中傳遞完整的資料集一次是不夠的,對於有限的資料集(是在批梯度下降情況下),使用一個迭代過程,更新權重一次或者說使用一個epoch是不夠的,需要將完整的資料集在同樣的神經網路中傳遞多次,隨著epoch次數增加,神經網路中的權重的更新次數也增加,模型從欠擬合變得過擬合。

2、batch

(1)keras官方文件中給出的解釋:

深度學習的優化演算法,說白了就是梯度下降。每次的引數更新有兩種方式:

第一種,遍歷全部資料集算一次損失函式,然後算函式對各個引數的梯度,更新梯度。這種方法每更新一次引數都要把資料集裡的所有樣本都看一遍,計算量開銷大,計算速度慢,不支援線上學習,這種稱為Batch gradient descent,批梯度下降

另一種,每看一個數據就算一下損失函式,然後求梯度更新引數,這個稱為隨機梯度下降,stochastic gradient descent.這個方法速度比較快,但是收斂效能不太好,可能在最優點附近晃來晃去,hit不到最優點,兩次引數的更新也有可能互相抵消掉,造成目標函式震盪的比較劇烈。

為了克服兩種方法的缺點,現在一般採用的是一種折中手段,mini-batch gradient decent,小批的梯度下降,這種方法把資料分為若干個批,按批來更新引數,這樣,一個批中的一組資料共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性。另一方面因為批的樣本數與整個資料集相比小了很多,計算量也不是很大。

(2)batch_size:

Keras中引數更新是按批進行的,就是小批梯度下降演算法,把資料分為若干組,稱為batch,按批更新引數,這樣,一個批中的一組資料共同決定了本次梯度的方向,一批資料中包含的樣本數量稱為batch_size。

3、iteration

將資料分為幾個batch而不是一次性通過神經網路時,iteration是batch需要完成一個epoch的次數,也就是number of batches (區別於 batch size) , 在一次epoch中 number of batches = iteration = 訓練樣本總數 / batch size

比如,對於一個有2000個訓練樣本的資料集,將2000個樣本分成大小為500的batch,那麼完成一個epoch需要4個iteration

4、batch size 和 epoch 的選取

(1)訓練網路過程中,一個batch中的樣本規模大小,即batch size 和epoch個數一起通過影響更新權重的頻率定義了網路學習資料的速度。

對於固定的epoch:

(a)在合理範圍內,隨著batch size增大,跑完一次epoch所需的迭代數減少,對於相同資料量的處理速度進一步加快,確定的下降方向越準,引起的訓練震盪越小。

(b)batch size 過大時,跑完一次epoch所需的迭代數減少,想要達到相同的精度,所花費的時間大大增加了,從而對引數的修正也變得緩慢,batch size增大到一定程度,其確定的下降方向已經基本不再變化

對於固定的batch size:

(a)在合理範圍內隨著epoch的增加,訓練集和測試集的誤差呈下降趨勢,模型的訓練有了效果

(b)隨著epoch的繼續增加,訓練集的誤差呈下降而測試集的誤差呈上升趨勢,模型過擬合訓練集對測試集效能不好

(2)實驗實驗,通過實驗+經驗選取合適的batch size 和 epoch

訓練截圖:

keras中epoch,batch,loss,val_loss用法說明

網路的權重引數W在每一個batch size都會進行一次更新,介面顯示的loss值是 iteration次batch size訓練後loss值的加權求和值。val_loss是跑完一次Epoch後,跑完一次驗證集計算的值。

---------訓練總結------------

train loss 不斷下降,test loss不斷下降,說明網路仍在學習;(最好的)

train loss 不斷下降,test loss趨於不變,說明網路過擬合;(max pool或者正則化)

train loss 趨於不變,test loss不斷下降,說明資料集100%有問題;(檢查dataset)

train loss 趨於不變,test loss趨於不變,說明學習遇到瓶頸,需要減小學習率或批量數目;(減少學習率)

train loss 不斷上升,test loss不斷上升,說明網路結構設計不當,訓練超引數設定不當,資料集經過清洗等問題。(最不好的情況)

以上這篇keras中epoch,val_loss用法說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。