matlab實現bp演算法
Ⅰ bp神經網路演算法 在matlab中的實現
BP神經網路是最基本、最常用的神經網路,Matlab有專用函數來建立、訓練它,主要就是newff()、train()、sim()這三個函數,當然其他如歸一化函數mapminmax()、其他net的參數設定(lr、goal等)設置好,就可以通過對歷史數據的學習進行預測。附件是一個最基本的預測實例,本來是電力負荷預測的實例,但具有通用性,你仔細看看就明白了。
Ⅱ 求教在MATLAB中BP演算法最後怎麼由測試數據得到實際輸出啊
首先對於數據進行歸一化,我就不用matlab裡面的代碼了
maxP = max(max(p));
p = p';
Input = p(:, 1:4)./maxP;
Target = p(:, 2:5)./maxP;
netP = newff(Input, Target, 10);
netP = train(netP, Input, Target);
上面這個神經網路預測下一年的P值
P09_13 = zeros(6, 5)
for i = 1:5
if i == 1
P09_13(:, i) = sim(net, p(:, 5));
else
P09_13(:, i) = sim(net, P09_13(:, i-1));
end
end
以上得到09-13年預測出來的p值
下面求p-t之間的關系
Input = p./maxP;
Target =t./maxP;
net = newff(Input, Target, 10);
net = train(net, Input, Target);
以上代碼求出了p-t對應關系
preliminaryResult = zeros(1, 5);
for i = 1:5
preliminaryResult = sim(net, P09_13(:, i));
end
result = preliminaryResult.*maxP;
result裡面是09-13年預測出來的房價。
我沒給你實際跑這個程序,明天就交論文你這個點求助我就不說你什麼了。
Ⅲ 使用MATLAB求解BP神經網路
% A百分含量 [7.1 7.0 6.9 6.8 7.2]
% B百分含量 [3.2 3.4 3.6 3.8 4.0]
% C百分含量 [2.5 2.9 3.1 2.6 2.2]
%
% 硬度[78 65 78 69 72]
%
% P=[。。。];輸入T=[。。。];輸出
clear;clc
%數據
A=[7.1 7.0 6.9 6.8 7.2];
B=[3.2 3.4 3.6 3.8 4.0];
C=[2.5 2.9 3.1 2.6 2.2];
P=[A;B;C];
T=[78 65 78 69 72];
% 創建一個新的前向神經網路
net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')
% 當前輸入層權值和閾值
inputWeights=net_1.IW{1,1}
inputbias=net_1.b{1}
% 當前網路層權值和閾值
layerWeights=net_1.LW{2,1}
layerbias=net_1.b{2}
% 設置訓練參數
net_1.trainParam.show = 50;
net_1.trainParam.lr = 0.05;
net_1.trainParam.mc = 0.9;
net_1.trainParam.epochs = 10000;
net_1.trainParam.goal = 1e-3;
% 調用 TRAINGDM 演算法訓練 BP 網路
[net_1,tr]=train(net_1,P,T);
% 對 BP 網路進行模擬
A = sim(net_1,P);
% 計算模擬誤差
E = T - A;
MSE=mse(E)
x=[7.1 3.2 2.5]';%測試
sim(net_1,x)
Ⅳ 用Matlab算BP神經網路的具體演算法
BP神經網路的傳遞函數一般採用sigmiod函數,學習演算法一般採用最小梯度下降法;下面是具體的程序例子:
例1 採用動量梯度下降演算法訓練 BP 網路。
訓練樣本定義如下:
輸入矢量為
p =[-1 -2 3 1
-1 1 5 -3]
目標矢量為 t = [-1 -1 1 1]
解:本例的 MATLAB 程序如下:
close all
clear
echo on
clc
% NEWFF——生成一個新的前向神經網路
% TRAIN——對 BP 神經網路進行訓練
% SIM——對 BP 神經網路進行模擬
pause
% 敲任意鍵開始
clc
% 定義訓練樣本
% P 為輸入矢量
P=[-1, -2, 3, 1; -1, 1, 5, -3];
% T 為目標矢量
T=[-1, -1, 1, 1];
pause;
clc
% 創建一個新的前向神經網路
net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')
% 當前輸入層權值和閾值
inputWeights=net.IW{1,1}
inputbias=net.b{1}
% 當前網路層權值和閾值
layerWeights=net.LW{2,1}
layerbias=net.b{2}
pause
clc
% 設置訓練參數
net.trainParam.show = 50;
net.trainParam.lr = 0.05; 學習速率
net.trainParam.mc = 0.9; 動量系數
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
pause
clc
% 調用TRAINGDM 演算法訓練 BP 網路
[net,tr]=train(net,P,T);
pause
clc
% 對 BP 網路進行模擬
A = sim(net,P)
% 計算模擬誤差
E = T - A
MSE=mse(E)
pause
clc
echo off
Ⅳ 用matlab實現bp演算法,對樣本進行預測
來的:
lc;
P=[110 0.807 240 0.2 15 1 18 2 1.5;
110 2.865 240 0.1 15 2 12 1 2;
110 2.59 240 0.1 12 4 24 1 1.5;
220 0.6 240 0.3 12 3 18 2 1;
220 3 240 0.3 25 3 21 1 1.5;
110 1.562 240 0.3 15 3 18 1 1.5;
110 0.547 240 0.3 15 1 9 2 1.5];
%110 1.318 300 0.1 15 2 18 1 2];
T=[54248 162787 168380 314797;
28614 63958 69637 82898;
86002 402710 644415 328084;
230802 445102 362823 335913;
60257 127892 76753 73541;
34615 93532 80762 110049;
56783 172907 164548 144040];
%40907 117437 120368 130179];
m=max(max(P));
n=max(max(T));
P=P'/m;
T=T'/n;
%-------------------------------------------------------------------------%
pr(1:9,1)=0; %輸入矢量的取值范圍矩陣
pr(1:9,2)=1;
bpnet=newff(pr,[12 4],, 'traingdx', 'learngdm');
%建立BP神經網路, 12個隱層神經元,4個輸出神經元
%tranferFcn屬性 'logsig' 隱層採用Sigmoid傳輸函數
%tranferFcn屬性 'logsig' 輸出層採用Sigmoid傳輸函數
%trainFcn屬性 'traingdx' 自適應調整學習速率附加動量因子梯度下降反向傳播演算法訓練函數
%learn屬性 'learngdm' 附加動量因子的梯度下降學習函數
net.trainParam.epochs=1000;%允許最大訓練步數2000步
net.trainParam.goal=0.001; %訓練目標最小誤差0.001
net.trainParam.show=10; %每間隔100步顯示一次訓練結果
net.trainParam.lr=0.05; %學習速率0.05
bpnet=train(bpnet,P,T);
%-------------------------------------------------------------------------
p=[110 1.318 300 0.1 15 2 18 1 2];
p=p'/m;
r=sim(bpnet,p);
R=r'*n;
display(R);
Ⅵ 下圖用matlab怎麼編bp演算法代碼
%讀取訓練數據
[f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150);
%特徵值歸一化
[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
%創建神經網路
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('testData.txt' , '%f%f%f%f%f',150);
%測試數據歸一化
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 )
看了你的數據,你至少要有的類標號吧,不知道你哪裡是輸入向量,哪裡是輸出向量
Ⅶ matlab中使用BP演算法計算學習速率總是報錯
lr=0.05; %lr為學習速率;
err_goal=0.1; %err_goal為期望誤差最小值
max_epoch=15000; %max_epoch為訓練的最大次數;
a=0.9; %a為慣性系數
Oi=0;
Ok=0; %置隱含層和輸出層各神經元輸出初值為0
這些初始參數是誰提供給你?
調整一下這些參數看看.
Ⅷ 有哪位大神知道BP神經網路變學習率學習演算法在Matlab中怎麼實現啊
額。。。
一種啟發式的改進就是,為學習速率選用自適應值,它依賴於連續迭代步驟中的誤差函數值。
自適應調整學習速率的梯度下降演算法,在訓練的過程中,力圖使演算法穩定,同時又使學習的步長盡量地大,學習速率則是根據局部誤差曲面作出相應的調整。當誤差以減小的方式趨於目標時,說明修正方向正確,於是步長(學習速率)增加,因此學習速率乘以增量因子Ir_inc,使學習速率增加;而當誤差增加超過設定的值C倍時,說明修正過頭,應減小步長,因此學習速率乘以減量因子Ir_dec,使學習速率減少.其他情況學習速率則不變。
Matlab 里有對應的變學習速率的函數。
bpnet=newff(x,[60,4],{'logsig','logsig'},'traingda'); %'traingda'表示自適應學習速率調整方法
bpnet.trainParam.show=50;
bpnet.trainParam.lr=0.01; %預設值的學習速率
bpnet.trainParam.epochs=3000;
bpnet.trainParam.goal=0.247;
bpnet.trainParam.Ir_inc=1.05; %增加的學習速率倍數,默認為1.05
bpnet.trainParam.Ir_dec=0.7; %減少的學習速率倍數,默認為0.7
bpnet.trainParam.max_perf_inc=1.04; %誤差函數增加為迭代前的1.04時,減少學習速率。默認為1.04
[bpnet]=train(bpnet,p,t);
save bpnet;
%%%%%%%%%%%%%%%%%%%%
Ⅸ 求一個用matlab實際的bp演算法
首先對於數據進行歸一化,我就不用matlab裡面的代碼了
maxP = max(max(p));
p = p';
Input = p(:, 1:4)./maxP;
Target = p(:, 2:5)./maxP;
netP = newff(Input, Target, 10);
netP = train(netP, Input, Target);
上面這個神經網路預測下一年的P值
P09_13 = zeros(6, 5)
for i = 1:5
if i == 1
P09_13(:, i) = sim(net, p(:, 5));
else
P09_13(:, i) = sim(net, P09_13(:, i-1));
end
end
以上得到09-13年預測出來的p值
下面求p-t之間的關系
Input = p./maxP;
Target =t./maxP;
net = newff(Input, Target, 10);
net = train(net, Input, Target);
以上代碼求出了p-t對應關系
preliminaryResult = zeros(1, 5);
for i = 1:5
preliminaryResult = sim(net, P09_13(:, i));
end
result = preliminaryResult.*maxP;
result裡面是09-13年預測出來的房價。
我沒給你實際跑這個程序,明天就交論文你這個點求助我就不說你什麼了。我估計應該沒錯誤。
聽天由命吧,少年。
Ⅹ 用matlab實現BP神經網路,求全部過程,謝謝大神
所有BP神經網路的訓練方法都是相似的,僅僅是將樣本和網路結構進行修改。你這種情況,只需要將輸入P與輸出T進行修改,並將輸入節點數設為3,輸出節點數設為1,即可。請參考附件的代碼。
newff函數的格式為:
net=newff(PR,[S1 S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF),函數newff建立一個可訓練的前饋網路。輸入參數說明:
PR:Rx2的矩陣以定義R個輸入向量的最小值和最大值;
Si:第i層神經元個數;
TFi:第i層的傳遞函數,默認函數為tansig函數;
BTF:訓練函數,默認函數為trainlm函數;
BLF:權值/閥值學習函數,默認函數為learngdm函數;
PF:性能函數,默認函數為mse函數。