1. 程式人生 > >卷積神經網路引數設定

卷積神經網路引數設定

接觸機器學習的時間還比較短,對於訓練的結果往往無法解釋,不知道為什麼好,也不知道為什麼不好。所以羅列了一下卷積神經網路中設定的引數,希望能有所幫助。

一、訓練集選擇

訓練集(Training Set):訓練模型,簡單的說就是通過訓練集的資料來確定擬合曲線的引數。

測試集(Test Set): 測試已經訓練好的模型的精確度。

測試集和訓練集的劃分方法有留出法、交叉驗證法和自助法,具體可以參考如何劃分訓練集和測試集的介紹。留出法用得比較多,自助法一般只用於樣本數特別少的情況。但是,建議樣本量應該要有足夠多,否則機器學習的結果不太好。簡單說一下注意點:1.樣本要隨機化,防止大資料淹沒小資料(到底是樣本間差異很大的樣本集訓練出的結果好,還是樣本間差異小的樣本集訓練出的結果好,比較疑惑影象的視角不同和顏色不同對結果的影響。

);2.訓練集資料的數量應占2/3到4/5,剩下的是測試集;3.樣本要做歸一化,歸一化的具體作用是歸納統一樣本的統計分佈性,能減少訓練時間,避免出現異常樣本資料引起的訓練結果無法收斂。

二、卷積引數設定

如網路層數、卷積核大小、滑動步長等屬於超引數,大多是通過已有的架構來做一些微調。

一般的影象識別,卷積的網路層數設定為2層以上就足夠了;如果是醫學影象或者是視訊類影象可能要設定3層或以上。

卷積核大小和滑動步長的設定決定了最後輸出多少個特徵。在達到相同感受野的情況下,卷積核越小,所需要的引數和計算量越小。用多個小的卷積核疊加使用要遠比一個大的卷積核單獨使用效果要好的多。當然,如果卷積核過小的話,可能會無法表示其特徵。具體可以參考:

https://blog.csdn.net/kuangtun9713/article/details/79475457。

啟用函式(activation function)的意義在於判定每個層的輸出是否達到閾值,達到了就要提取它的特徵,而沒有達到就會輸出為0,這樣就使得和該特徵無關的區域不會影響到該特徵提取方式的訓練。注意,啟用函式一定是非線性的,因為卷積的每一層的輸出都是上一層的線性函式,無論神經網路有多少層,輸出都是輸入的線性組合。如果啟用函式仍然使用線性的,多層的隱藏函式與一層的隱藏函式作用相當,就失去了深度神經網路的意義。常用的啟用函式有Sigmoid、ReLu,tanh等等,函式的選擇視樣本輸入選擇(多層神經網路一般使用relu)。具體可以參考

https://blog.csdn.net/fire_light_/article/details/79542602。

Dropout layer的放置位置以及大小非常重要,一般既可以放在啟用函式前也可以放在啟用函式後面,具體效果要靠自己調。訓練一個大型網路時,因為訓練資料有限,很容易出現過擬合,即模型的泛化能力差,網路只對訓練資料集的擬合能力好,換成其他的資料集,擬合能力就變差了。所以,有了Dropout layer,使網路在提取訓練集特徵時,捨棄掉一部分特徵來提高網路的泛化能力,其作用就是防止過擬合。

三、調整的引數

1.mini-batch值

2.學習速率(learning rate)

很重要。深度學習模型通常由隨機梯度下降演算法進行訓練。隨機梯度下降演算法有許多變形:例如 Adam、RMSProp、Adagrad 等等。這些演算法都需要你設定學習率。學習率決定了在一個小批量(mini-batch)中權重在梯度方向要移動多遠。如果學習率很低,訓練會變得更加可靠,但是優化會耗費較長的時間,因為朝向損失函式最小值的每個步長很小。反之,如果學習率很高,訓練可能根本不會收斂,甚至會發散。權重的改變數可能非常大,使得優化越過最小值,使得損失函式變得更糟。所以,訓練應當從相對較大的學習率開始。這是因為在開始時,初始的隨機權重遠離最優值。在訓練過程中,學習率應當下降,以允許細粒度的權重更新。比如一開始可以lr設定為0.1,然後執行到loss不怎麼降的時候,學習速率除以10,設定為0.01,再接著訓練。具體可以參考:https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/78566465