Ⅰ matlab中bp神經網路的工具箱怎麼用,不要matlab程序,就工具箱怎麼實現問題的解決
matlab中神經網路的工具箱:輸入nntool,就會彈出一個對話框,然後你就可以根據彈出框的指示來操作。
Ⅱ matlabBP神經網路工具箱,可以調整隱含層節點數嘛
Matlab神經網路工具箱幾乎包含了現有神經網路的最新成果,神經網路工具箱模型包括感知回器、線性網路、答BP網路、徑向基函數網路、競爭型神經網路、自組織網路和學習向量量化網路、反饋網路BP神經網路具有很強的映射能力,主要用於模式識別分類、函數逼近、函數壓縮等。下面通過實例來說明BP網路在函數逼近方面的應用需要逼近的函數是f(x)=1+sin(k*pi/2*x),其中,選擇k=2進行模擬,設置隱藏層神經元數目為n,n可以改變,便於後面觀察隱藏層節點與函數逼近能力的關系。
Ⅲ 請大師指點:BP網路工具箱中的newff()中的參數如何設置
threshold是一個限定BP網路輸出的范圍
在它規定的范圍內為有效(當無效值太多的時候會early stop)
[9,4]代表輸入輸出的專神經元數目
學習速度關屬繫到誤差梯度的調整,由於誤差梯度是由誤差對權值的求導得出的,我們加上一個學習速度的系數可以加快或減慢權值調整的速度.一般在0.1~0.8之間.當然也可以用可變學習速率的訓練函數進行,這樣學習速率可以在開始的時候大一些,而後減小,優化學習過程.
Ⅳ BP神經網路工具箱process
每次訓練,網路的初始權值都不同,因此BP演算法的每次迭代、權值修正都不相同。可以認為每次訓練都充滿了隨機性,這也是有時訓練會陷入局部極小點,而有時並不會的原因。
performance就是指網路最後的性能,你之前設定的net.trainParam.goal=0.00001;就是這個指標。MATLAB訓練時測試樣本的輸出誤差達到這個設定值,訓練就停止了。
以右邊的值為准,中間框子里的值是不斷變化的,當走到最右端時就達到了預設目標。
Ⅳ bp神經網路只有一類樣本怎麼分類
神經網路一列為一個樣本,所以對於matlab 而言,要求輸入和輸出的列數必須一樣的
經常有人問起的問題:
Error using ==> network/train
Targets are incorrectly sized for network.
Matrix must have 1 rows.
解決:要求P T 的列數一樣 ,如果不一樣 P=p』 t=t』 轉置一下
2.
歸一
澄清一個對歸一的錯誤理解1
樣本矩陣為9行4列。9組樣本,4個變數。現在歸一化:
x=[68.7 66.6 5610 19.2;
89.9 90.8 4500 11.8;
120.8 120.6 6800 20.6;
169 40.4 6160 40.6;
180.8 69.8 7330 33.4;
190.3 130.2 7320 31.6;
109.8 151.1 5754 86.1;
33.2 61.4 8255 22.6;
111.7 126.6 7040 13.6;]
寫法一:
for i=1:9
x1(i,:)=(x(i,:)-min(x(i,:)))/(max(x(i,:))-min(x(i,:)))
end
結果:
0.0089 0.0085 1.0000 0
0.0174 0.0176 1.0000 0
0.0148 0.0148 1.0000 0
0.0210 0 1.0000 0.0000
0.0202 0.0050 1.0000 0
0.0218 0.0135 1.00 00 0
0.0042 0.0115 1.0000 0
0.0013 0.0047 1.0000 0
0.0140 0.0161 1.0000 0
寫法二:
x=x'
for i=1:4
x1(i,:)=(x(i,:)-min(x(i,:)))/(max(x(i,:))-min(x(i,:)))
end
結果:
Columns 1 through 8
0.2260 0.3609 0.5576 0.8644 0.9395 1.0000 0.4876 0
0.2367 0.4553 0.7245 0 0.2656 0.8112 1.0000 0.1897
0.2956 0 0.6125 0.4421 0.7537 0.7510 0.3340 1.0000
0.0996 0 0.1184 0.3876 0.2907 0.2665 1.0000 0.1454
Column 9
0.4997
0.7787
0.6764
0.0242
注意:寫法2為正確的歸一化
對歸一的錯誤理解2
將數據集分為訓練集和測試集,對訓練集和測試集分別做歸一處理
所以就會有人問 如果我的測試集只有一個數據 如何歸一呀
最大最小值從那裡找呀
正確的理解是:
訓練集和測試集的歸一標準是一樣的
建議:
如果訓練集和測試集是一起歸一的 可以自己編程實現歸一
如果是訓練集和測試集是分開的,最好是使用matlab自帶的premnmx、postmnmx、tramnmx 函數
如果是自己編程的話 ,請注意訓練集和測試集的歸一標准需要一樣
premnmx、postmnmx、tramnmx 函數
的使用例子如下:
Example
Here is the code to normalize a given data set so
that the inputs and targets will fall in the
range [-1,1], using PREMNMX, and the code to train a network
with the normalized data.
p = [-10 -7.5 -5 -2.5 0 2.5 5 7.5 10];
t = [0 7.07 -10 -7.07 0 7.07 10 7.07 0];
[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);
net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');
net = train(net,pn,tn);
If we then receive new inputs to apply to the trained
network, we will use TRAMNMX to transform them
first. Then the transformed inputs can be used
to simulate the previously trained network. The
network output must also be unnormalized using
POSTMNMX.
p2 = [4 -7];
[p2n] = tramnmx(p2,minp,maxp);
an = sim(net,pn);
[a] = postmnmx(an,mint,maxt);
這個是歸一到-1 和 1 之間 那我要歸一到0 1 之間怎麼辦
有人說可以使用加絕對值就歸一到 0 1之間了
我覺得加絕對值可能會有些問題
比較好的方式是變換
P 在-1 1 之間
Pp=(p+1)/2 就可以歸一到0 1之間
至於要歸一到0.1- 0.9 之間 選取合適的變換就可以做到了
二、神經網路(BP)系列(2)(初學者系列)每次結果不一樣解析
這個系列主要針對使用matlab 神經網路工具箱,對一些初學者容易理解錯誤的地方進行解析。
神經網路每次結果不同解析
神經網路每次結果不同是因為初始化的權值和閾值是隨機的
因為每次的結果不一樣,才有可能找到比較理想的結果啊
找到比較好的結果後,用命令save filename net;保存網路,
可使預測的結果不會變化,調用時用命令load filename net;
取p_test=[ ];
t_test=[ ];
t=sim(net,p_test);
err=t_test-t;
plot(p_test,err);
選擇誤差小的保存網路
save filename net
以後調用時
load filename net
p_test=[ ];
t_test=[ ];
t=sim(net,p_test);
err=t_test-t;
plot(p_test,err):
因為每次初始化網路時都是隨機的,而且訓練終止時的誤差也不完全相同,結果訓練後的權植和閥也不完全相同(大致是一樣的),所以每次訓練後的結果也略有不同
舉個例子,這樣初始化就能使網路的輸出結果是一樣的,另外也可以給網路特定的權值,一種方法是把預測結果後的效果比較好的權值做為初值
p=[0.8726 0.9441 0;0 0 0.7093;0.7378 0.7093 0.3795;0.6416 0.3795 0.7031;1 0.7031 0.4241;0.7774 0.4241 0.9559;0.9559 0.5012 0.7052;...
0.8209 0.7052 0.4983;0.6011 0.4983 1;]';
t=[0 0.7378 0.6416 1 0.7774 0.5012 0.8209 0.6011 0.9350];
rand('state',0);
net=newff(minmax(p),[6,1],{'tansig','logsig'},'trainlm');
net.trainParam.epochs=2000;
net.trainParam.goal=0.001;
net=train(net,p,t);
y=sim(net,p);
error=y-t;
res=norm(error);
p_test=[0.9350 1 0.6236;]';
t_test=[ 0.8027]
a=sim(net,p_test)
rand('state',0);
這個的作用是每次初始化一樣
0是種子數,如果換成其他數,就可以產生不同的隨機值
注: rand('state',0);的使用有點為結果相同而相同,至於這樣的結果網路性能是否達到好的要求則沒有考慮,建議還是不要用這種方法使每次結果相同
用保存網路的方法吧
消除初值影響可以考慮的另一個方法是簡單集成神經網路
原理
由於選擇不同的權值所得結果不同,使最終神經網路泛化能力體現出一定的隨機性。利用這個特性也可以改善神經網路的泛化能力,神經網路集成便是利用這種思路的體現,即先訓練一組只有初始權值不同的子網,然後通過各子網「表決(Voting)」 的形式(如加權和)得到學習系統的輸出。
當神經網路集成用於分類器時,集成的輸出通常由個體網路的輸出投票產生。通常利用絕對多數投票法(某分類成為最終結果當且僅當輸出結果為該分類的神經網路的數目最多)。理論分析和大量實驗表明,後者優於前者。因此,在對分類器進行集成時,目前大多採用相對多數投票法。
當神經網路集成用於回歸估計時,集成的輸出通常由各網路的輸出通過簡單平均或加權平均產生。Perrone等人認為,採用加權平均可以得到比簡單平均更好的泛化能力。
三、神經網路(BP)系列(3)(初學者請看)分類實例
分類實例
輸入輸出設計:
對某一問題分析,影響網路性能的輸入主要有5個指標,輸出則分為8類。8類的話可以用三位二進製表示。
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
神經網路的輸入為5維的向量,輸出為三維的向量。輸入的數據具有不同的單位和量級,所以在輸入在輸入神經網路之前應該首先進行歸一化處理,將樣本數據歸一到0 1之間。
樣本總共有328組數據
將樣本集分為訓練集和測試集
隨機抽取70取做為測試測試集
其餘的作為訓練集
網路設計
採用tansig(x)和logsig(x)函數作為傳輸函數,tansig(x)如下式:
tansig=2/(1+exp(-2x))-1
logsig(x) 如下式:
logsig(x) = 1 / (1 + exp(-n))
對於有限個輸入到輸出的映射,並不需要無限個隱層節點,這就涉及到如何選擇隱層節點數的問題,而這一問題的復雜性,使得至今為止尚未找到一個很好的解析 式,隱層節點數往往根據前人設計所得的經驗和自己進行試驗來確定。設計網路時我採用的方法是通過神經網路訓練來確定隱含層的個數,首先確定隱含層中節點數目的范圍,設計一個隱含層神經元數目可變的BP網路,通過誤差對比,確定最佳的隱含層神經元的個數。最後確定的隱含層的個數為12。所以網路結構為 5-12-3的三層結構。
load('CSHuju1.mat');
p=CC1(:,[1,3:6])';
T=[0 0 0;
1 1 1;
1 1 0;
1 0 1;
1 0 0;
0 1 1;
0 1 0;
0 0 1];
t=repmat(T,41,1)';
pp=p;
%%%%%%歸一到 0 1 之間
for i=1:5
p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
AllSamNum=328;%總樣本數
TrainSamNum=258;%訓練樣本數
TestSamNum=AllSamNum-TrainSamNum;%測試樣本數
PerPos=randperm(AllSamNum);
TrainDataIn=p(:,1:TrainSamNum)
TrainDataOut=t(:,1:TrainSamNum)
TestDataIn=p(:,PerPos(:,TrainSamNum+1:TrainSamNum+TestSamNum))
TestDataOut=t(:,PerPos(:,TrainSamNum+1:TrainSamNum+TestSamNum))
MaxMin=[0 1; 0 1; 0 1; 0 1;0 1];
net=newff(MaxMin,[12,3],{'tansig','logsig'},'trainlm');
%訓練參數設置
net.trainParam.epochs=1000;
%訓練次數
net.trainParam.goal=0.0001;
%訓練結束的目標
LP.lr=0.1;
%學習率
net.trainParam.show=20;
net=train(net,TrainDataIn,TrainDataOut);
out=sim(net,TestDataIn)
訓練結果:
TRAINLM, Epoch 0/1000, MSE 0.296308/0.0001, Gradient 83.9307/1e-010
TRAINLM, Epoch 20/1000, MSE 0.0224641/0.0001, Gradient 6.7605/1e-010
TRAINLM, Epoch 40/1000, MSE 0.00563627/0.0001, Gradient 3.27027/1e-010
TRAINLM, Epoch 60/1000, MSE 0.00348587/0.0001, Gradient 1.49868/1e-010
TRAINLM, Epoch 80/1000, MSE 0.00247714/0.0001, Gradient 0.459233/1e-010
TRAINLM, Epoch 100/1000, MSE 0.0018843/0.0001, Gradient 0.289155/1e-010
TRAINLM, Epoch 120/1000, MSE 0.00148204/0.0001, Gradient 0.392871/1e-010
TRAINLM, Epoch 140/1000, MSE 0.00119585/0.0001, Gradient 0.340864/1e-010
TRAINLM, Epoch 160/1000, MSE 0.000980448/0.0001, Gradient 0.391987/1e-010
TRAINLM, Epoch 180/1000, MSE 0.000779059/0.0001, Gradient 0.389835/1e-010
TRAINLM, Epoch 200/1000, MSE 0.000606974/0.0001, Gradient 0.310202/1e-010
TRAINLM, Epoch 220/1000, MSE 0.000388926/0.0001, Gradient 0.331632/1e-010
TRAINLM, Epoch 240/1000, MSE 0.000143563/0.0001, Gradient 0.0403953/1e-010
TRAINLM, Epoch 248/1000, MSE 9.87756e-005/0.0001, Gradient 0.174263/1e-010
TRAINLM, Performance goal met.
訓練好的權值、閾值的輸出方法是:
輸入到隱層權值:w1=net.iw{1,1}
隱層閾值:theta1=net.b{1}
隱層到輸出層權值:w2=net.lw{2,1};
輸出層閾值:theta2=net.b{2}
>>w1=net.iw{1,1}
w1 =
1.7663 -2.8022 -0.7142 -2.1099 -2.4011
3.6614 -2.5297 -4.4295 5.0508 8.1899
4.4007 7.6775 -6.0282 6.1567 1.8775
4.5009 -9.9915 5.9737 5.0234 3.3931
0.2703 -2.8850 0.4482 -2.9153 1.3648
2.3769 3.3151 0.8745 3.1900 1.2608
-2.2815 -6.6847 1.8738 2.4093 -2.9033
-5.3332 6.1506 -8.4386 -6.7979 3.1428
-0.0135 -10.8942 -9.6333 7.2311 12.0693
2.3130 5.2211 0.0155 2.9431 0.3135
-6.4017 -0.8987 0.1976 3.2527 0.1444
-3.6517 -1.6339 3.5505 2.4813 1.7880
>> theta1=net.b{1}
theta1 =
0.5955
-5.4876
-9.8986
-4.4731
3.6523
-4.0371
5.6187
5.7426
0.9147
-8.5523
-2.3632
-5.6106
>> w2=net.lw{2,1}
w2 =
Columns 1 through 8
-0.2751 -3.5658 -2.3689 -6.4192 -1.1209 1.5711 -1.7615 7.6202
-1.2874 -9.1588 -14.4533 7.5064 3.7074 0.9019 8.7033 -5.0031
3.3536 -0.8844 7.8887 0.9336 0.8410 -2.4905 1.0627 -9.3513
Columns 9 through 12
-2.5894 -1.9950 -3.0132 -4.7009
13.3490 -9.8521 -4.6680 -4.2037
-5.9251 2.9388 -1.6797 -2.1077
>> theta2=net.b{2}
theta2 =
-2.4762
0.5692
0.6694
輸出:
out =
Columns 1 through 8
1.0000 1.0000 0.0020 0.0000 1.0000 1.0000 0.0000 0.0000
1.0000 0.0000 0.0041 1.0000 1.0000 1.0000 1.0000 1.0000
0.9991 0.0000 0.0036 0.0015 0.9992 0.9985 0.0055 0.0036
Columns 9 through 16
1.0000 0.0000 0.0019 1.0000 0.0000 0.0000 0.0000 0.9996
1.0000 1.0000 0.9901 1.0000 1.0000 1.0000 1.0000 0.0000
0.9977 0.9999 0.9996 0.9994 0.0046 0.0023 0.0014 1.0000
Columns 17 through 24
0.0020 0.9925 0.0020 0.0000 0.0020 1.0000 0.0002 1.0000
0.0041 0.0284 0.0041 0.0284 0.0041 1.0000 0.9983 1.0000
0.0036 0.9955 0.0036 1.0000 0.0036 0.9989 0.9999 0.9990
Columns 25 through 32
1.0000 0.9938 1.0000 0.0000 1.0000 0.9999 0.0000 1.0000
1.0000 0.0177 0.0000 0.0021 1.0000 0.0006 1.0000 1.0000
0.0000 0.9971 0.0000 1.0000 0.0000 0.0004 0.9999 0.0000
Columns 33 through 40
0.9954 1.0000 0.0000 0.0000 0.9951 0.0020 0.0000 0.9997
0.0065 1.0000 1.0000 0.0025 0.0178 0.0041 1.0000 0.0000
0.9986 0.9990 0.9999 1.0000 0.0101 0.0036 0.0013 1.0000
Columns 41 through 48
0.0000 1.0000 0.9983 0.0000 0.0020 1.0000 0.0000 0.9873
0.0020 1.0000 0.0000 0.0037 0.0041 1.0000 0.0328 0.0637
1.0000 0.0000 0.9999 1.0000 0.0036 0.9982 1.0000 0.9884
Columns 49 through 56
0.0000 0.0001 1.0000 1.0000 1.0000 0.0000 0.0004 1.0000
0.0164 0.9992 0.9982 1.0000 1.0000 1.0000 0.9965 0.9998
1.0000 0.9999 0.9948 0.9991 0.9989 0.0024 0.9998 0.9968
Columns 57 through 64
1.0000 1.0000 0.0000 0.0020 0.0020 0.0001 0.0001 0.0000
0.9763 1.0000 0.0134 0.0041 0.0041 0.9990 0.0395 0.0017
0.0202 0.9988 1.0000 0.0036 0.0036 0.9999 0.9999 1.0000
Columns 65 through 70
0.9993 0.0000 0.0000 0.9978 1.0000 1.0000
0.0000 0.0018 0.0110 0.0001 1.0000 0.9998
1.0000 1.0000 1.0000 0.9999 0.9987 0.0007
每次結果因為初始化不同會不一樣,可以選取一個性能比較好的網路
保持起來
save myBpNet net
save myShu.mat TestDataIn TestDataOut
測試數據也保存起來
(TestDataIn TestDataOut 為測試數據的輸入向量和目標向量)
以後調用時
load myshu.mat
load myBpNet net
out=sim(net,TestDataIn)
基本框架程序:(前面的樣本數據自己根據實際情況設計)
load('CSHuju1.mat');
p=CC1(:,[1,3:6])';
T=[0 0 0;
1 1 1;
1 1 0;
1 0 1;
1 0 0;
0 1 1;
0 1 0;
0 0 1];
t=repmat(T,41,1)';
pp=p;
%%%%%%歸一到 0 1 之間
for i=1:5
p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
AllSamNum=328;%總樣本數
TrainSamNum=258;%訓練樣本數
TestSamNum=AllSamNum-TrainSamNum;%測試樣本數
PerPos=randperm(AllSamNum);
TrainDataIn=p(:,1:TrainSamNum)
TrainDataOut=t(:,1:TrainSamNum)
TestDataIn=p(:,PerPos(:,TrainSamNum+1:TrainSamNum+TestSamNum))
TestDataOut=t(:,PerPos(:,TrainSamNum+1:TrainSamNum+TestSamNum))
MaxMin=[0 1; 0 1; 0 1; 0 1;0 1];
net=newff(MaxMin,[12,3],{'tansig','logsig'},'trainlm');
net.trainParam.epochs=1000;
%訓練次數
net.trainParam.goal=0.0001;
%訓練結束的目標
LP.lr=0.1;
%學習率
net.trainParam.show=20;
net=train(net,TrainDataIn,TrainDataOut);
out=sim(net,TestDataIn)
Ⅵ matlab bp神經網路工具箱怎麼用
%% 訓練集/測試集產來生
% 訓練源集——用於訓練網路
P_train = ;%輸入集
T_train = ;%輸出集
% 測試集——用於測試或者使用。
P_test = ;%輸入
T_test ;
N = size(P_test,2);
%% BP神經網路創建、訓練及模擬測試
% 創建網路
net = newff(P_train,T_train,9);
% 設置訓練參數
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.lr = 0.01;
% 訓練網路
net = train(net,P_train,T_train);
% 模擬測試、使用。
T_test = sim(net,P_test);%得到結果。
Ⅶ 關於matlab 中神經網路工具箱使用:幫我解釋下這段創建BP神經網路,用於數據分類的結果
從你的代碼上看,返回來的不是0就是1,是分類的結果啊!
Ⅷ 需要把MATLAB中的BP神經網路工具箱與自己的一個軟體項目結合
這個就是C++與matlab混合編程。但是神經網路工具箱比較特別,它反盜用比較嚴厲。採用回傳統的混答編方式,可以調用matlab自己的函數,但無法成功調用神經網路工具箱。這一點在mathwork網站上也做了說明。
以C#為例,一般混編有四種方式:
(1)利用Matlab自身編譯器,目的是將m文件轉換為c或c++的源代碼。
(2)利用COM或.NET組件技術。通過MATLAB中的Deploy tool工具將m文件編譯成dll,然後在系統中調用。
(3)利用Mideva平台。沒嘗試過。
(4)利用MATLAB引擎技術。該方法相當於在.NET中運行MATLAB程序,獲取其結果。優點是操作簡單,過程簡易。缺點是需要安裝Matlab軟體。
如果要調用神經網路工具箱,只有使用第四種方法,即引擎技術,其他方法都不可行。這種混編方式僅僅傳遞參數,因此不涉及到神經網路工具箱的代碼,也就沒有了防盜用限制。
Ⅸ bp神經網路 matlab 工具箱怎麼調出來
有神經網路的工具箱,bp是配出來的!
Ⅹ bp神經網路matlab工具箱建模結果
你用的是matlab的神經網路工具箱吧。那是因為權值和閾值每次都是隨機初始化的專,所以結果屬就會不一樣,
你可以把隨機種子固定,即在代碼前面加上setdemorandstream(pi); 這樣每次訓練出來的結果都是一樣的了。
看來樓主是剛開始學習神經網路的,推薦一些資料給樓主:
神經網路之家 (專講神經網路的網站,有視頻下載)
matlab中文論壇的神經網路專區
數學中國的神經網路專區
較好的書:
MATLAB神經網路原理與實例精解