2016-09-08 127 views
1

我在前饋神經網絡中的輸入,這是我在Keras中實現的,我只是想檢查我的理解是否正確。前饋 - 神經網絡Keras

[[ 25.26000023 26.37000084 24.67000008 23.30999947] 
[ 26.37000084 24.67000008 23.30999947 21.36000061] 
[ 24.67000008 23.30999947 21.36000061 19.77000046]...] 

所以在上面的數據中它是一個數組中4個輸入的時間窗口。我輸入層

model.add(Dense(4, input_dim=4, activation='sigmoid')) 

model.fit(trainX, trainY, nb_epoch=10000,verbose=2,batch_size=4) 

的batch_size和爲4,理論上當我打電話擬合函數會在功能上走在每個nb_epoch所有這些投入?並且batch_size是否需要爲4才能使此時間窗工作?

感謝約翰

回答

1

和batch_size是4,理論上當我調用fit函數時函數會遍歷每個nb_epoch中的所有這些輸入嗎?

是的,每個時期被迭代超過所有訓練樣本

,並在不batch_size時需4爲了使這種時間窗口工作?

不,這些都是完全不相關的東西。 只是您的訓練數據的一個子集,用於計算成本函數的真實梯度的近似值。批次越大 - 越接近真正的漸變(原始漸變下降),但訓練速度會變慢。更接近1你得到 - 它變得越來越隨機,嘈雜的近似值(更接近隨機梯度下降)。匹配batch_size和data維度的事實只是一個奇怪的巧合,並沒有任何意義。

讓我把這個更generall設置,則在與添加劑損失函數(神經網絡通常使用)梯度下降做到底是怎麼回事針對該

grad_theta 1/N SUM_i=1^N loss(x_i, pred(x_i), y_i|theta) = 
= 1/N SUM_i=1^N grad_theta loss(x_i, pred(x_i), y_i|theta) 

其中loss梯度一些損失函數您的pred(預測)與y_i相比。

以及基於批量scenatio(粗略的想法)是你不需要去對所有的例子,而是一些嚴格的子集,像batch = {(x_1, y_1), (x_5, y_5), (x_89, y_89) ... }和使用形式

1/|batch| SUM_(x_i, y_i) in batch: grad_theta loss(x_i, pred(x_i), y_i|theta) 

由於梯度近似您可以看到這與x_i所在的空間無關,因此與數據的維度沒有關係。

1

讓我用一個例子來說明這一點:

當你有32個訓練例子,你叫model.fit爲4 batch_size,神經網絡將有4例在同一時間呈現,但是一個時期仍將被定義爲對所有32個示例的一次完整傳遞。因此,在這種情況下,網絡一次將通過4個示例,理論上至少將正向傳球(和反向傳球)稱爲32/4 = 8次。

在極端情況下,當您的batch_size爲1時,即爲普通的舊隨機梯度下降。當您的batch_size大於1時,則稱爲批梯度下降。