轉自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: 動量因子
