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函数。