adaboost訓練之經驗總結

2021-08-04 05:47:56 字數 1749 閱讀 4423

利用adaboost訓練的分類器做了幾個專案(當然在實際應用過程中,我對adaboos的原始碼做了優化和改善,同時我也用了深度學習--caffe做了類似的工作,綜合權衡演算法檢測率、演算法效率,在專案中採用的還是adaboost,後期我會花大量時間對caffe改進、優化), 以下純為訓練前要注意的事項。

0、訓練前,正樣本尺寸的選擇很重要。

1、訓練時正樣本的設定:越多越好,但是要考慮訓練機器的記憶體。在訓練前,正樣本設定的通用公式為:posnum+numstages*[(1-minhitrate)*posnum +50~300]引數設定為130000,minhitrate為0.99,那鐵定訓練不到20層。因為訓練到到第12層時,儘管第12層也只訓練130000個正樣本,但是這些正樣本是從130000+12*[(1-0.99)*130000+100]=151100中選取的,該數量已經超過了正樣本總數150000,因此12層的訓練無法進行(訓練視窗會提示取不到足夠的正樣本)。

2、訓練時負樣本的選擇應注意:

a、正負樣本的比例在1:2~1:3之間較好,具體多少需要自己做實驗,有條件的話建議用伺服器同時訓練幾個不同比例額的分類器,從中選取合適的,如1:2,1:2.3,1:2.5,1:3比例的分類器。

b、負樣本的比例一定要大於正樣本的比例,否則,訓練到某一層時,adaboost會在收集負樣本的迴圈中陷入死迴圈,造成好幾天甚至訓練會一直無法繼續進行。因此,為保證負樣本的通用性(訓練別的不同尺寸的正樣本的分類器也能用),w*h最好大於100*100。

c、負樣本數量的選取要多,少了在訓練過程中就擷取不到設定的負樣本數量,(負樣本的選取是訓練程式自動經過這個流程:擷取--檢測-確定是否識別錯,只有擷取後檢測為正樣本的才當成負樣本:因為它識別錯了)。

3、正樣本和負樣本的共性:

a、多樣性方面:正負樣本的多樣性越多越好,越全面越好。與演算法的術語「泛化性 」同乙個意思。

b、相似度方面:負樣本與正樣本的相似度越大越好(非越小越好,否則訓練會停在某一層,因為根據上面2-c條所說的,負樣本都識別為負樣本了:沒有識別錯,也就程式不能取得足夠數量的負樣本了,訓練怎麼能繼續下去呢?)。

4、引數方面:

a、minhitrate越大,準確性越高。其他的影響見上述1條列。

b、maxfalsalarmrate設定得越大,訓練越快,同時生成分類器的大小越小。

c、maxweakcount:弱分類器個數,預設是100,設定越大訓練越慢,生成的分類器檔案也越大(該影響力次於maxfalsalarmrate),誤撿就越少(同一層的僅maxweakcount不同的分類器相比)。

5、訓練過程中的應注意的問題

a、訓練過程中遇到正負樣本個數不足,比如:30個小時還是看不到訓練或者提示樣本不足,此時應:暫停(ctrl+c),然後新增正樣本或者負樣本。然後接著訓練,但是在繼續訓練前要主要生成標註檔案個正樣本的vec。

b、由於不知道哪一階的分類器最佳,可以在全部層數訓練完後、或者在訓練過程中,生成各階的分類器,具體方法是複製乙份訓練器的exe,利用「編輯」開啟後修改其中的層數,然後執行即可。但是不能修改分類器引數後再繼續訓練。

最後,隨著分類器階數的增加,分類器的準確性會下降、誤撿也會下降,但是準確性(漏檢)的下降較大。形象的比如是:「過五關斬六將」,過到第30關,準確性被斬了不少了。

另:這些僅僅是訓練時應注意的問題和方法。要想真正的掌握它,還是要看演算法設計的思想、原始碼。

最後,針對分類器層數越高,漏檢越嚴重的現象,為了應用到實際的專案中,在優化**的同時,我還通過分析分類中代價函式等函式的優缺點後,設計了乙個類似與殘差的補償公式,經過訓練後,分類器的檢測準確率明顯提高。公式就不在這裡展示了(有洩密的嫌疑)。

RNN模型訓練經驗總結

搭建模型 forward propagation設定 back propagation設定 避免出現nan的幾個方法 利用好過擬合。其他經驗 技巧集錦 訓練神經網路前,別管 先從預處理資料集開始。一定要認認真真先去了解資料的分布並找出其中的規律。在檢查資料的過程中,可能會發現重複的 標記錯誤的樣本,...

經驗總結 資料預處理經驗總結1

1.對於特徵較多的df,進行資料預處理時需要對每個特徵變數進行相關處理,為了避免混亂,可以df.info 後將輸出複製到sublime,然後在sublime中針對每個特徵變數進行處理方式標註 非python 只是為了展示在sublime中的效果 action type 30697 non null ...

C 經驗總結

1.標準庫的使用過程中,自己一定要注意,不能使用迭代器保留,因為新的stl中,加入了迭代器新的檢測機制,就是為了怕使用者使用的過程中自己將迭代器有意無意的引用了不存在的物件,因此這就要求我們的迭代器物件一定要在訪問的物件之前進行析購,否則你的程式將出錯。這個是c v8.0 中ms 加入新的安全機制,...