用BP神经网络建立数学模型,MATLAB实现,怎样得到输入到输出的计算公式
建立一个线形方程,x1=1;x2=2;y1=5*x1++6*x2+3;z1=4*y1+8;这里计算结果Z1=88用神经网络方法,P=[12]';%输入矩阵T=[88];%...
建立一个线形方程,
x1=1;
x2=2;
y1=5*x1++6*x2+3;
z1=4*y1+8;
这里计算结果Z1=88
用神经网络方法,
P=[1 2]'; %输入矩阵
T=[88]; %目标向量
net=newff(P,T,1,{'purelin','purelin'}); %创建网络
net.trainparam.epochs=100; %迭代次数
net.trainparam.goal=1e-5; %精度
net.trainparam.lr=0.01; %步长
net=train(net,P,T); %训练
y=sim(net,P); %仿真
a=net.iw{1,1}; %输入层到隐含层权值
b=net.b{1}; %输入层到隐含层阈值
c=net.lw{2,1}; %隐含层到输出层权值
d=net.b{2}; %隐含层到输出层阈值
那么得出来的权值阈值该怎样写出这个线形方程呢? 展开
x1=1;
x2=2;
y1=5*x1++6*x2+3;
z1=4*y1+8;
这里计算结果Z1=88
用神经网络方法,
P=[1 2]'; %输入矩阵
T=[88]; %目标向量
net=newff(P,T,1,{'purelin','purelin'}); %创建网络
net.trainparam.epochs=100; %迭代次数
net.trainparam.goal=1e-5; %精度
net.trainparam.lr=0.01; %步长
net=train(net,P,T); %训练
y=sim(net,P); %仿真
a=net.iw{1,1}; %输入层到隐含层权值
b=net.b{1}; %输入层到隐含层阈值
c=net.lw{2,1}; %隐含层到输出层权值
d=net.b{2}; %隐含层到输出层阈值
那么得出来的权值阈值该怎样写出这个线形方程呢? 展开
2个回答
展开全部
% 计算S1与S2层的输出
A1=tansig(W1*p,B1);
t=purelin(W2*A1,B2);
这就是p到t的映射关系。
BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。
追问
这里w1是权值,B1是阈值?w2是权值,B2是阈值?这样的话是说A2与sim(net,P)是相等的?可是算出来还是不一样的。
追答
原来另一个问题也是你问的。注意阈值是个负数,或者b为正数,但x0=-1.
展开全部
clear;
%输入数据矩阵
p1=zeros(1,1000);
p2=zeros(1,1000);
for i=1:1000
p1(i)=rand;
p2(i)=rand;
end
p=[p1;p2];
%目标(输出)数据矩阵
t = cos(pi*p1)+sin(pi*p2);
%对训练集中的输入数据矩阵和目标数据矩阵进行归一化处理
[pn, inputStr] = mapminmax(p);
[tn, outputStr] = mapminmax(t);
%建立BP神经网络
net = newff(pn, tn, [200,10]);
%每10轮回显示一次结果
net.trainParam.show = 10;
%最大训练次数
net.trainParam.epochs = 5000;
%网络的学习速率
net.trainParam.lr = 0.05;
%训练网络所要达到的目标误差
net.trainParam.goal = 10^(-8);
%网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。为了让程序继续运行,用以下命令取消这条设置
net.divideFcn = '';
%开始训练网络
net = train(net, pn, tn);
%获取网络权值、阈值
netiw = net.iw;
netlw = net.lw;
netb = net.b;
w1 = net.iw{1,1}; %输入层到隐层1的权值
b1 = net.b{1} ; %输入层到隐层1的阈值
w2 = net.lw{2,1}; %隐层1到隐层2的权值
b2 = net.b{2} ; %隐层1到隐层2的阈值
w3 = net.lw{3,2}; %隐层2到输出层的权值
b3 = net.b{3} ;
in = mapminmax('apply',[0.1;0.5],inputStr);
%用公式计算输出
y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3;
y1=mapminmax('reverse',y,outputStr);
%用网络验证计算结果
out = sim(net,in);
out1=mapminmax('reverse',out,outputStr);
%输入数据矩阵
p1=zeros(1,1000);
p2=zeros(1,1000);
for i=1:1000
p1(i)=rand;
p2(i)=rand;
end
p=[p1;p2];
%目标(输出)数据矩阵
t = cos(pi*p1)+sin(pi*p2);
%对训练集中的输入数据矩阵和目标数据矩阵进行归一化处理
[pn, inputStr] = mapminmax(p);
[tn, outputStr] = mapminmax(t);
%建立BP神经网络
net = newff(pn, tn, [200,10]);
%每10轮回显示一次结果
net.trainParam.show = 10;
%最大训练次数
net.trainParam.epochs = 5000;
%网络的学习速率
net.trainParam.lr = 0.05;
%训练网络所要达到的目标误差
net.trainParam.goal = 10^(-8);
%网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。为了让程序继续运行,用以下命令取消这条设置
net.divideFcn = '';
%开始训练网络
net = train(net, pn, tn);
%获取网络权值、阈值
netiw = net.iw;
netlw = net.lw;
netb = net.b;
w1 = net.iw{1,1}; %输入层到隐层1的权值
b1 = net.b{1} ; %输入层到隐层1的阈值
w2 = net.lw{2,1}; %隐层1到隐层2的权值
b2 = net.b{2} ; %隐层1到隐层2的阈值
w3 = net.lw{3,2}; %隐层2到输出层的权值
b3 = net.b{3} ;
in = mapminmax('apply',[0.1;0.5],inputStr);
%用公式计算输出
y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3;
y1=mapminmax('reverse',y,outputStr);
%用网络验证计算结果
out = sim(net,in);
out1=mapminmax('reverse',out,outputStr);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询