matlab BP 神经网络 归一化的理解

大家都知道feedforwardnet里面对数据先进行了归一化再来计算的。训练好神经网络后,用sim函数可以得到准确的值,但是为什么我们自己写算法来计算就得不到计算结果呢?因为归一化!!!

见代码

clear all


[x,t] = simplefit_dataset;
net = feedforwardnet(10)
net = train(net,x,t);
%view(net)
%y = net(x)
%perf = perform(net,y,t)
test_num = 5;
xT = x(:,test_num); %xT为验证数据
yt = t(test_num)
yo = sim(net,xT)


%% 手动算法验证

%归一化
[x1 psx] = mapminmax(x); %注意 这里的x,t 是训练数据
[t1 pst] = mapminmax(t);

xT1 = mapminmax('apply',xT,psx);

hi = net.IW{1} * xT1;
hi = hi + net.b{1};
ho = tansig(hi);

yi = net.LW{2,1} * ho;
yi = yi + net.b{2};


yo2 = yi
yo2_1 = mapminmax('reverse',yo2,pst) %输出结果与yt yo 一致!


得出的结论就是:

1、验证数据的输入数据的归一化需要根据训练数据来获得;验证数据的结果的反归一化也需要训练数据获得。

2、数据信息是列,那么归一化是针对行,即所有的a1,用[-1,1]来表示,所有的a2用[-1,1]来表示,...,所有的an用[-1,1]来表示,而a1,a2,..an之间无归一化关系。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值