神經網絡新舊版本newff比較


轉自http://blog.csdn.net/guyuealian/article/details/66969232

使用Matlab工具箱創建神經網絡時,需要用到newff函數,但若使用舊版本的newff函數,會出現下面的警告:

>> net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx') ; %舊版本
Warning: NEWFF used in an obsolete way. 

一、新舊版本newff函數差異和解決方法:

     這種警告是由於使用舊版本的newff參數列表,解決方法很簡單,就是改為新版本形式參數列表:

net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx') ; %舊版本
net2 = newff( input,output', [10] , { 'logsig' 'purelin' } , 'traingdx' ) ;    %新版本

說明:舊版本中第一個參數需要結合minmax()函數使用,新版本不需要了;新版本中不需要指定輸出層的神經元個數,改為由輸入參數output決定,其他參數不變。

     這是新舊版本創建神經網絡的方法,但存在另外一個問題,即使相同的數據和參數下,新舊版本的計算結果總是不一樣,而且二者偏差很大,通常新版本的newff方法的識別率總是偏低。

     網上找了一些原因:newff.m分成三大塊:主程序、新版實現子函數 new_5p1()、舊版實現子函數 new_5p0()。通過仔細比較新舊這兩個子函數,發現新版設置了net.divideFcn 屬性,其值為'dividerand'。該函數把樣本數據三分為訓練集、驗證集和測試集,默認比例是6:2:2。

     若想減少新舊版本之間的差異,需要清除net2.divideFcn等屬性再訓練,否則結果相去甚遠,且遠不止一個數量級。因此,解決新舊版本newff之間差異的方法,是在新版中net2中再添加一條語句:

net2.divideFcn = '';

二、新版newff函數參數說明:

(1)net=newff(P,T,S)或者net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
   P:輸入參數矩陣。(RxQ1),其中Q1代表R元的輸入向量。其數據意義是矩陣P有Q1列,每一列都是一個樣本,而每個樣本有R個屬性(特征)。一般矩陣P需要歸一化,即P的每一行都歸一化到[0 1]或者[-1 1]。
   T:目標參數矩陣。(SNxQ2),Q2代表SN元的目標向量。
   S:N-1個隱含層的數目(S(i)到S(N-1)),默認為空矩陣[]。輸出層的單元數目SN取決於T。返回N層的前饋BP神經網絡
   TF:相關層的傳遞函數,默認隱含層為tansig函數,輸出層為purelin函數。
   BTF:BP神經網絡學習訓練函數,默認值為trainlm函數。
   BLF:權重學習函數,默認值為learngdm。
   PF:性能函數,默認值為mse。
   IPF,OPF,DDF均為默認值即可。
如:

net = newff( minmax(TrainData) , [50 4] , { 'logsig' 'purelin' } , 'traingdx' ) ;%舊版本
PS:其中TrainData:是輸入的訓練的數據矩陣,注意TrainData矩陣形式每一列是一個樣本,每一行是樣本的屬性或特征
net = newff( input,output, [50] , { 'logsig' 'purelin' } , 'traingdx' ) ;        %新版本

(2)傳遞函數
   purelin 線性傳遞函數
   tansig 正切 S 型傳遞函數
   logsig 對數 S 型傳遞函數
   隱含層和輸出層函數的選擇對BP神經網絡預測精度有較大影響,一般隱含層節點轉移函數選用 tansig函數或logsig函數,輸出層節點轉移函數選用tansig函數或purelin函數。
(3)學習訓練函數
神經網絡的學習分為有導師學習和無導師學習。
   最速下降BP算法:traingd
   動量BP算法:traingdm
   學習率可變的BP算法:trainda(學習率可變的最速下降BP算法);traindx(學習率可變的動量BP算法)
   彈性算法:trainrp
   變梯度算法:traincgf(Fletcher-Reeves修正算法)
            traincgp(Polak_Ribiere修正算法)
            traincgb(Powell-Beale復位算法)
            trainbfg(BFGS 擬牛頓算法)
            trainoss(OSS算法)
            trainlm(LM算法)
參數說明:通過net.trainParam可以查看參數
    Show Training Window Feedback   showWindow: true
    Show Command Line Feedback showCommandLine: false
    Command Line Frequency            show: 兩次顯示之間的訓練次數
    Maximum Epochs                   epochs: 訓練次數
    Maximum Training Time              time: 最長訓練時間(秒)
    Performance Goal                      goal: 網絡性能目標
    Minimum Gradient                  min_grad: 性能函數最小梯度
    Maximum Validation Checks         max_fail: 最大驗證失敗次數
    Learning Rate                           lr: 學習速率
    Learning Rate Increase              lr_inc: 學習速率增長值
    Learning Rate                       lr_dec: 學習速率下降值
    Maximum Performance Increase  max_perf_inc:
    Momentum Constant                       mc: 動量因子

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM