基本就三個函數:
newff():創建一個bp神經網絡
train():訓練函數
sim():仿真函數
同時具有可視化界面,但目前不知道可視化界面如何進行仿真,且設置不太全
工具箱:Neural net fitting
textread使用方法:http://blog.sina.com.cn/s/blog_9e67285801010bju.html
ex1.
clear; clc; %注意P矩陣,matlab默認將一列作為一個輸入 P=[0.5152 0.8173 1.0000 ; 0.8173 1.0000 0.7308; 1.0000 0.7308 0.1390; 0.7308 0.1390 0.1087; 0.1390 0.1087 0.3520; 0.1087 0.3520 0.0000;]'; %以第四個月的銷售量歸一化處理后作為目標向量 T=[0.7308 0.1390 0.1087 0.3520 0.0000 0.3761]; %創建一個BP神經網絡,每一個輸入向量的取值范圍為[0 ,1],隱含層有5個神經元,輸出層有一個神經元,隱含層的激活函數為tansig,輸出層的激活函數為%logsig,訓練函數為梯度下降函數,即標准學習算法 net=newff([0 1;0 1;0 1],[5,1],{'tansig','logsig'},'traingd');%minmax(P) net.trainParam.epochs=1500;%最大迭代次數. net.trainParam.goal=0.01; %訓練的誤差精度 %設置學習速率為0.1 LP.lr=0.1; net=train(net,P,T); a=[0.1;0.2;0.3]; a=premnmx(a); b=sim(net,a); b=postmnmx(b,0,1); b
ex2.
P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2; 9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7; 3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45; 2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15; 140 120 140 150 80 130 130 100 130 140 115 80 90 130; 2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6; 11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85; 50 70 50 80 50 60 65 40 65 50 50 50 70 70]; T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35]; [p1,minp,maxp,t1,mint,maxt]=premnmx(P,T); %創建網絡 net=newff(minmax(P),[8,6,1],{'tansig','tansig','purelin'},'trainlm');%此時的minmax函數是正確的,minmax是在每一行取最大最小值,而這也是有意義的 %設置訓練次數 net.trainParam.epochs = 5000; %設置收斂誤差 net.trainParam.goal=0.0000001; %訓練網絡 [net,tr]=train(net,p1,t1); %TRAINLM, Epoch 0/5000, MSE 0.533351/1e-007, Gradient 18.9079/1e-010 %TRAINLM, Epoch 24/5000, MSE 8.81926e-008/1e-007, Gradient 0.0022922/1e-010 %TRAINLM, Performance goal met. %輸入數據 a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50]; %將輸入數據歸一化 a=premnmx(a); %放入到網絡輸出數據 b=sim(net,a); %將得到的數據反歸一化得到預測數據 c=postmnmx(b,mint,maxt); c
ex3.
close all; clear; clc; %讀取訓練數據 [f1,f2,f3,f4,class] = textread('Train.txt','%f%f%f%f%d',75,'delimiter',','); %特征值歸一化 [input,minI,maxI] = premnmx( [f1,f2,f3,f4 ]') ; %構造輸出矩陣 s=length(class) ; output=zeros(s,3) ; for i=1:s output(i,class(i)) = 1 ; end %output=class'; %創建神經網絡 net = newff( minmax(input),[10 3],{ 'logsig','purelin' },'traingdx' ); %設置訓練參數 net.trainparam.show=50 ; net.trainparam.epochs=500 ; net.trainparam.goal=0.01 ; net.trainParam.lr=0.01 ; %開始訓練 net=train(net,input,output') ; %讀取測試數據 [t1 t2 t3 t4 c]=textread('Test.txt','%f%f%f%f%d',75,'delimiter',','); %測試數據歸一化 testInput=tramnmx([t1,t2,t3,t4]',minI,maxI); %仿真 Y = sim(net,testInput) %統計識別正確率 [s1,s2]=size( Y ) ; hitNum=0 ; for i=1:s2 [m,Index]=max( Y(:,i)); if(Index==c(i)) hitNum=hitNum+1; end end sprintf('識別率是 %3.3f%%',100*hitNum/s2)
擬合曲線: