冰冰点灯,照亮我家门前~
欢迎进入nnetinfo
用户名:
密码:
深圳学习数据分析,数据挖掘,请联系yahushuxue@163.com~
nnetinfo : 本网发布神经网络相关的学习与研讨内容。
当前位置:教学区
神经网络归一化
作者:xiaoH   日期:2015-07-20 16:06:27.0

一般来说,为了方便网络训练,一般会先将输入输出数据归一化,再进行训练。训练完后,在用网络预测时,还需要将网络的预测值反归一化。

 

设我们的网络有两个输入,一个输出,原始数据如下:

归一化

在训练前,为避免各个输入变量的数量级差异过大,一般会先将数据归一化到[-1,1]的区间。

归一化的方法如下:

归一化公式:

x0是原始数据,x是归一化后的数据。

那么可知x1的最大值为8,最小值为-2,可计算得x1归一化后的值如下:

 

同样处理x2和y,得到归一化后的数据如下:

反归一化

注意:我们用的是归一化后的数据进行训练的。所以网络是针对归一化后的数据的。

例如我要预测x1=2,x2=3时的y,要先将x1,x2归一化,

在做归一化时候我们知道x1的最大值为8,最小值为-2, 那么x1=2归一化后为:

同理归一化x2,然后再将归一化后的x1,x2代入网络表达式,得到simy,此时的simy也是归一化后的simy,必须将它反归一化。

反归一化即归一化时的反函数:

例如,我们用网络预测到的是0.5,那么我们知道归一化时,y的最大值为5,最小值为-5,可计算得反归一后的y:

x1 = linspace(-3,3,100); %在[-3,3]之间线性生成100个数据

x2 = linspace(-2,1.5,100); %在[-2,1.5]之间线性生成100个数据

y = sin(x1)+0.2*x2.*x2;   %生成y

 

inputData  = [x1;x2]; %将x1,x2作为输入数据

outputData = y;       %将y作为输出数据

 

%归一化处理:

inputMax = max(inputData,[],2); %输入的最大值

inputMin = min(inputData,[],2); %输入的最小值

 

outputMax = max(outputData,[],2); %输出的最大值

outputMin = min(outputData,[],2); %输出的最小值

 

 

[varNum,sampleNum] = size(inputData);

inputDataNorm  = inputData;  %初始化inputDataNorm

outputDataNorm = outputData; %初始化outputDataNorm

%进行归一化

for i = 1 : sampleNum

 inputDataNorm(:,i)  = 2*(inputData(:,i)-inputMin)./(inputMax-inputMin)-1;   

 outputDataNorm(:,i) = 2*(outputData(:,i)-outputMin)./(outputMax-outputMin)-1;      

end

 

%使用用输入输出数据(inputDataNorm、outputDataNorm)建立网络,隐节点个数设为3.其中输入层到隐层、隐层到输出层的节点分别为tansig和purelin,使用trainlm方法训练。

net = newff(inputDataNorm,outputDataNorm,3,{'tansig','purelin'},'trainlm');

 

%设置一些常用参数

net.trainparam.goal = 0.0001; %训练目标:均方误差低于0.0001

net.trainparam.show = 400;    %每训练400次展示一次结果

net.trainparam.epochs = 15000;  %最大训练次数:15000.

 

[net,tr] = train(net,inputDataNorm,outputDataNorm);%调用matlab神经网络工具箱自带的train函数训练网络

 

figure;

%训练数据的拟合效果

simoutNorm = sim(net,inputDataNorm);

%反归一化:

simout=(simoutNorm+1).*(outputMax-outputMin)/2+outputMin;

 

title('神经网络预测结果')

hold on

t=1:length(simout);

plot(t,outputData,t,simout,'r')%画图,对比原来的y和网络预测的y