MATLAB BP神经网络输出结果与手工计算结果不一致的解决办法

MATLAB BP神经网络输出结果与手工计算结果不一致的解决办法

在我的一个算法中,我需要神经网络中间层的输出值。在用matlab仿真过程中发现不管是用feedforward还是newff,都自动的对我的输入数据进行了归一化,这就导致了我自己手动用“输入值原始值×权值+偏置”计算的值是错误的。

我在网上找了很久,没有一个方法能解决我的问题。于是我展开了尝试,终于找出了解决办法。本办法同样适用于

  • “ feedforwardnet函数如何对输入和输出进行归一化”
  • “MATLAB feedforwardnet与手动计算不一样”
  • “newff如何设置才能不进行归一化?”
  • “BP神经网络如何提取输入量对输出量的影响,利用LW*IW计算的结果和仿真输出的结果怎么不一致”

等问题。解决办法是,不用feedforward活着newff的新用法,而是采用如下的老版本的newff用法,即
net_model = newff(minmax(input), [9 2] , { ‘tansig’ ‘purelin’ } , ‘trainlm’ )
这样的用法。具体代码如下

% 神经网络输出与采用权值计算输出结果一致;
clc;clear
NUM=100;
x_k=10*rand(2,NUM)-1; % 第k个状态
u=5*rand(1,NUM)-1;  % 输入u
A = [0,.4;.3,1];
B = [0;1];
x_kp1=A*x_k+B*u; % 第k+1个状态

input=[x_k;u]; %神经网络输入量
output=x_kp1;  %神经网络输出量
% net_model= newff(input,output,9,{'tansig', 'purelin'}, 'trainlm'); 
net_model = newff(minmax(input), [9 2] , { 'tansig' 'purelin' } , 'trainlm' ) ; 
net_model.biasConnect = [1;1];
net_model.trainParam.showWindow = 1;
net_model.trainParam.epochs = 20;
net_model.trainParam.mu = 1e-8;
net_model.trainParam.min_grad = 1e-6;

net_model = train(net_model,input,output);
view(net_model)
out_v=[];
for i = 1:size(x_k,2)
    s = tansig(net_model.IW{1} * [x_k(:,i);u(:,i)] +net_model.b{1});  
    out = net_model.LW{2} * s +net_model.b{2};
    out_v=[out_v,out];
end
out_net=net_model(input);
out_v-out_net   % 10-14次方数量级,几乎为0.
figure()
hold on
plot(out_v(1,:),'g*'); %  计算得到的输出分量1
hold on
plot(out_net(1,:),'b+');%  神经网络直接得到的输出分量1
figure()
plot(out_v(2,:),'g*');%  计算得到的输出分量2
hold on
plot(out_net(2,:),'b+');%  神经网络直接得到的输出分量2

结果如图1,图2所示。其中图1是计算得到的输出分量1与神经网络直接得到的输出分量1的对比,两者完全重合;图2 是计算得到的输出分量2与神经网络直接得到的输出分量2的对比,两者完全重合。
图1.计算得到的输出分量1(红线)与神经网络直接得到的输出分量1(蓝色星)的对比

图1.计算得到的输出分量1(红线)与神经网络直接得到的输出分量1(蓝色星)的对比

图2.计算得到的输出分量2(红线)与神经网络直接得到的输出分量2(蓝色星)的对比
图2.计算得到的输出分量2(红线)与神经网络直接得到的输出分量2(蓝色星)的对比

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值