神經網絡工具箱nntool的使用方法
|
|
|
關於如何使用nntool神經網絡工具箱進行“數據訓練”的方法:
1. 在命令窗口鍵入nntool命令打開神經網絡工具箱;
2. 點擊Import按鈕兩次,分別把輸入向量和目標輸出加入到對應的窗口([Inputs]和[Targets])中,有兩種可供選擇的加入對象(點擊Import后可以看見),一種是把當前工作區中的某個矩陣加入,另一種是通過.mat文件讀入;
3. 點擊[New Network]按鈕,填入各參數:(以最常用的帶一個隱層的3層神經網絡為例說明,下面沒有列出的參數表示使用默認值就可以了,例如Network Type為默認的BP神經網絡);
1) Input Range――這個通過點擊Get From Input下拉框選擇你加入的輸入向量便可自動完成。
2) Training Function——最好使用TRAINSCG,即共軛梯度法,其好處是當訓練不收斂時,它會自動停止訓練,而且耗時較其他算法(TRAINLM, TRAINGD)少,也就是收斂很快(如果收斂的話),而且Train Parameters輸入不多,也不用太多的技巧調整,一般指定迭代次數、結果顯示頻率和目標誤差就可以了(詳見下文)。
3) Layer 1 Number of Neurons——隱層的神經元個數,這是需要經驗慢慢嘗試並調整的,大致上由輸入向量的維數、樣本的數量和輸出層(Layer2)的神經元個數決定。
4) Layer 1 Transfer Function——一般用TANSIG(當然也可以LOGSIG),即表示隱層輸出是[-1,1]之間的實數,與LOGSIG相比范圍更大。
5) Layer 2 Number of Neurons——輸出層的神經元個數,對於兩類問題,個數為1,取值分別為0和1,對於多類問題,個數為10,取值為 等。
6) Layer 2 Transfer Function——如果是模式識別的兩類(或者多類)問題,一般用LOGSIG,即表示輸出層的輸出是[0,1]之間的實數。
所有參數輸入后,可以先用View按鈕預覽一下,沒有問題的話就可以Create了。另外,網絡創建完畢后,如果需要手動設置權重的初始值,按View按鈕后有個Initialize選項卡,在那里可以設定。當然了,可以不自行設定,這時候matlab執行默認的程序進行權重的初始化(沒有具體研究過,可能是隨機設定)。
4. 點擊Train按鈕,到達Training Info選項卡,在輸入向量[Inputs]和目標輸入向量[Targets]下拉框中選擇你要訓練的向量(即第二步加入的對象),然后到達Train Parameters選項卡,填入適當的迭代次數[epochs](一般先設置一個較小的數如200,然后觀察收斂結果,如果結果窗口的收斂曲線衰減較 快,則表示之前的參數比較有效,因此可填入2000或更大的數目使得網絡收斂,否則修改之前的參數)、結果顯示頻率[show](例如要每隔500次迭代 顯示結果窗口,則填500)和目標誤差[goal](這個與第2步中的“Performance Function”有關,如果使用默認的MSE,則一般滿足“goal*樣本數量<0.5”就可以了),就可以開始訓練了(按鈕[Train Network]),如果結果收斂(訓練誤差不大於目標誤差,即藍色線到達黑色線位置)就OK了。
后話:上面只介紹了“數據訓練”的方法,至於“數據測試”,則點擊Simulate按鈕就可以了(或者用C++寫,也不難,且網上有現成的BP神經網絡的程序),這個相對簡單,不說了。下面關於特征向量的維數問題和BP網絡的個數問題談談我的經驗。
如果是兩類問題,則特征向量維數可以比較小,例如識別4和9時,特征維數(曲率特征)為8便可;但當識別多類問題時(下面以十類為例),則特征維數太少是 不足以把各類問題分開的(即使使用十個網絡,每個網絡為一個兩類問題)。如果只設計一個網絡,要同時識別10個類,則此時樣本數量要足夠多。另外,應盡量 避免使用十個網絡進行分類(注意,這與多級分類問題不一樣,多級分類問題可以分為幾個兩類問題有效處理,而對於十個數字來說是同級多類問題),因為此時會 把類間相互約束的信息丟失,造成即使對訓練樣本收斂(而且往往收斂速度很快)但對測試樣本分類不好的情況出現,也就是分類器的推廣能力差。
