1. 程式人生 > 程式設計 >Keras框架中的epoch、bacth、batch size、iteration使用介紹

Keras框架中的epoch、bacth、batch size、iteration使用介紹

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指定batchsize

具體的測試可以將keras中的第6.4程式

1、Sequential情況下

如果想要指定批次的大小,需要在第一層的輸入形狀中使用batch_input_shape

而不能使用input_shape,因為input_shape不能指定批次的大小,批次只能為None

input_shape和batch_input_shape。

input_shape 不包含批量大小,

batch_input_shape是全情投入的形狀,包括批量大小。

2、函式式情況下

Input引數

shape: 一個尺寸元組(整數),不包含批量大小。A shape tuple (integer),not including the batch size. 例如,shape=(32,) 表明期望的輸入是按批次的 32 維向量。

batch_shape: 一個尺寸元組(整數),包含批量大小。 例如,batch_shape=(10,32) 表明期望的輸入是 10 個 32 維向量。

batch_shape=(None,32) 表明任意批次大小的 32 維向量。

以上這篇Keras框架中的epoch、bacth、batch size、iteration使用介紹就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。