調參,真的是讓我脫了一層皮的一項工作。
調了半天,訓練一天,結果什麼用都沒有的時候真的是絕望……
在實際調整引數之前,我們先要搞清楚兩個事情:
1.調參的目的是什麼?
2.調參調的東西具體是什麼?
第乙個問題:
調參的最終目的是要使訓練之後的模型檢測物體更精確,向程式的方向更靠近一步的話,就是使得損失函式(例如ssd中的loss)盡量小(因為利用訓練集訓練出來的模型質量在訓練過程中只能靠驗證集來檢測)。
因此,調參可以看做乙個多元函式優化問題。
第二個問題:
在解答第二個問題之前,我們先引入乙個概念,超引數。
【超引數】
在模型開始學習過程之前人為設定值的引數,而不是通過訓練得到的引數資料(諸如常規意義下的b、w)。
這些引數定義關於模型更高層次的概念(模型複雜性、學習能力等)。
不能直接從標準模型培訓過程中的資料中學習,需要預先定義。
可以通過設定不同的值,訓練不同的模型和選擇更好的測試值來決定。
示例:樹的數量或深度、學習率、深層神經網路隱藏層數、k均值聚類中的簇數……
那麼現在,可能大家心裡都有點數了,我們要調的引數,主要就是這個「超引數」。
【深度學習中常用的調節引數】
1.學習率(learning rate)
學習率的調整應該是乙個很常見的操作。一般隨著迭代次數的提高,當loss下不去的時候會先暫停訓練模型,然後將learning rate調整至原來的1/10再繼續進行訓練。
原因是,梯度下降過程中的學習率可以看做下山過程中的步長,假設你的一步很大可以跨過山谷直接踩到對面的山上的話,就很難得到區域性最優解。此時,減小步長會提高你走到地面的概率。
2.有關過擬合
利用drop out、batch normalization、data argument等方法可以有效防止過擬合,通過調整drop out中每個神經元被拋棄的概率可以調整模型的泛化能力。
3.網路層數
一般來說,網路層數越多,模型的效能(包括靈敏度、收斂等)就會越好(這也是為什麼深度神經網路最近這麼火的原因之一)。相應地,對計算能力的要求就會更高。
而且,層數越多,神經元節點數越多,過擬合的概率就會越高。
這怎麼辦?
利用2中的各種方法防止過擬合。
4.batch_size
可以適當增大batch_size,但這種方法可能會對計算機效能有所影響(在本機上將batch_size調到原來的2倍的時候:大概是從24調到48,機器已經卡得不要不要的了……)。
batch_size增大到某個時候,可以達到時間上最優;
batch_size增大到某些時候,可以達到最終收斂精度上最優。
參考:深度學習中常用的調節引數
參考:深度學習調參有哪些技巧?
機器學習 調參
在實際調整引數之前,我們先要搞清楚兩個事情 1.調參的目的是什麼?2.調參調的東西具體是什麼?第乙個問題 調參的目的是什麼?調參的最終目的是要使訓練之後的模型檢測物體更精確,向程式的方向更靠近一步的話,就是使得損失函式 例如ssd中的loss 盡量小 因為利用訓練集訓練出來的模型質量在訓練過程中只能...
Python PyCharm如何進行斷點除錯
編輯器不等於ide 整合開發環境 開發python程式,不是只有一種print 列印輸出除錯。術業有專攻,於人如此,於乙個軟體也是如此。讓專業的軟體做專業的事。以上兩點得出的結論 pycharm 我們以如下的一種常見錯誤,來演示如何通過pycharm斷點追蹤的方式發現程式中的錯誤 def foo b...
機器學習 關於調參
關於引數 feature scaling 機器學習中對於引數的理解不是數學中的數字,而是代表的是一種邏輯的趨勢的數字,這種邏輯是人類對場景的邏輯,也可以看作是人思想上對場景與數字引數的經驗,所以機器學習中的運算,不是數字的運算,而是邏輯的運算,如何設計出符合人類邏輯規律的運算,才能更好的 趨勢,這種...