赞
踩
大家都知道train里面对数据先进行了归一化再来计算的。训练好神经网络后,用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 一致!
MATLAB中归一化原理:
mapminmax按行逐行地对数据进行标准化处理,将每一行数据分别标准化到区间[ymin, ymax]内,其计算公式是:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin。如果某行的数据全部相同,此时xmax=xmin,除数为0,则Matlab内部将此变换变为y = ymin。
net.IW{1,1}(2,1) : net.IW{1,1}是指输入层和第一隐含层之间的网络权重,(2,1)读取该层间的每条路径的权重。
net.LW{2,1}(2,1) : net.LW{2,1}是指第二隐含层与第一隐含层之间的网络权重,(2,1)读取该层间的每条路径的权重。
net.b(n) : 读取第n个隐含层的偏置。
神经网络的线性非线性主要是由传输函数组成。
MATLAB的神经网络工具箱中包括两个非线性函数logsig和tansig,以及一个线性函数purelin。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。