在MATLAB中BP神经网络表达式

在MATLAB中,我们可以如此构建一个神经网络 
%使用用输入输出数据(inputData、outputData)建立网络,
%隐节点个数设为3.其中隐层、输出层的传递函数分别为tansig和purelin,使用trainlm方法训练。
net =newff(inputData,outputData,3,{'tansig','purelin'},'trainlm');
%设置一些常用参数
net.trainparam.goal =0.00001; %训练目标:均方误差低于0.0001
net.trainparam.show =400;   %每训练400次展示一次结果
net.trainparam.epochs =15000;  %最大训练次数:15000.
net.divideFcn = '';
[net,tr] =train(net,inputData,outputData);%调用matlab神经网络工具箱自带的train函数训练网络

其中,隐藏层节点是3,我选取较简单的输入层节点为2,输出层节点是 1来构建网络。

训练好网络后,可用sim函数来运行Simulink模型,可通过输入预测输出,例如:

input=[4000;20]
simout =sim(net,input); %调用matlab神经网络工具箱自带的sim函数得到网络的预测值

当然,input可以是多组数据组成的矩阵,也可以是一组数据组成的向量,如此便可得到预测值。

有的时候,我们需要提取已训练好的神经网络,我们可以把它的权值,阈值导出,如下代码,可提取出权值阈值的值。

w12 = net.iw{1,1} %第1层(输入层)到第2层(隐层)的权值
b2 = net.b{1}    %第2层(隐层)的阈值
w23 = net.lw{2,1} %第2层(输入层)到第3层(输出层)的权值
b3 = net.b{2}    %第3层(输出层)的阈值

结果如下:




得到权值与阈值的值后,我们要代入表达式中,

由于之前构建网络选用的激活函数是tandig ,purelin,预测结果的数学表达式如下:



代表这个权值是第2层的第1个节点到第3层的第1个节点的权值。

在MATLAB中,我将上式整理为如下形式:

simy=purelin(w23*tansig(w12*[a;b]+b2)+b3)

其中a,b是输入的两个数。

w23 ,w12 ,b2,b3为上边提取的权值阈值矩阵。


因为版本问题,newff函数有不同的用法,区别如下:

net =newff(inputData,outputData,3,{'tansig','purelin'},'trainlm');% 新
net =newff(minmax(inputData),[3 1],{'tansig','purelin'},'trainlm'); %旧
上边两种用法,新用法自带归一化,构建网络时,自动根据输入输出归一化了,旧用法需要手动归一化。

因为新版本自带归一化,新版本网络中的权值和阈值都是对于归一化后的数据,因此,在运用神经网络数学表达式时,需要在之前把输入归一化,在之后把输出反归一化。

归一化方法为
y=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin

y是归一化后数据,x是归一化前数据,反归一化公式为:

x=(y-ymin)*(xmax-xmin)/(ymax-ymin)+xmin

因为神经网络选择的是归一化到(-1,1),所以,ymin=-1.ymax=1,输入和输出都是如此。

可写成如下,便可得到数学表达式用输入预测输出,结果与sim函数一致。

a=2*(a-amin)/(amax-amin)-1;
b=2*(b-bmin)/(bmax-bmin)-1;
simy=purelin(w23*tansig(w12*[a;b]+b2)+b3)
simy=(simy+1)*(simymax-simymin)/2+simymin



为何要提取表达式呢,有的时候,在MATLAB上很方便的训练好网络后,可直接利用训练好的权值阈值在其他工具上使用。






  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值