mzy 发表于 2008-9-12 11:48

神经网络数据归一化疑问

使用函数premnmx和tramnmx;
训练样本大小为18*21,使用premnmx( = premnmx(train_tryin12);)后得到minp,maxp大小均为 18*1;
测试样本大小为3*21,使用tramnmx(=tramnmx(train_tryexe12,minp,maxp);)时出错,察看帮助

tramnmx(P,minp, maxp)takes these inputs
P -- R x Q matrix of input (column) vectors.
minp -- R x 1 vector containing original minimums for each input.
maxp -- R x 1 vector containing original maximums for each input
----------------------------------------------------------------------------------------------
p与minp,maxp行数R均相同,但是我的样本与测试向量行数并不相同,所以得到的minp,maxp不可能与样本有相同的行数,难道用tramnmx函数归一化时要求测试样本与训练样本有同样的行数?

frogfish 发表于 2008-9-13 11:12

是这样的,给你个例子吧
close all
clear
echo on
clc
%BP建模
%原始数据归一化
m_data=[1047.92 1047.83 0.39 0.39 1.0 3500 5075;
1047.83 1047.68 0.39 0.40 1.0 3452 4912;
1047.68 1047.52 0.40 0.41 1.0 3404 4749;
1047.52 1047.27 0.41 0.42 1.0 3356 4586;
1047.27 1047.41 0.42 0.43 1.0 3308 4423;
1046.73 1046.74 1.70 1.80 0.75 2733 2465;
1046.74 1046.82 1.80 1.78 0.75 2419 2185;
1046.82 1046.73 1.78 1.75 0.75 2105 1905;
1046.73 1046.48 1.75 1.85 0.70 1791 1625;
1046.48 1046.03 1.85 1.82 0.70 1477 1345;
1046.03 1045.33 1.82 1.68 0.70 1163 1065;
1045.33 1044.95 1.68 1.71 0.70 849 785;
1044.95 1045.21 1.71 1.72 0.70 533 508;
1045.21 1045.64 1.72 1.70 0.70 567 526;
1045.64 1045.44 1.70 1.69 0.70 601 544;
1045.44 1045.78 1.69 1.69 0.70 635 562;
1045.78 1046.20 1.69 1.52 0.75 667 580];
%定义网络输入p和期望输出t
pause
clc
p1=m_data(:,1:5);
t1=m_data(:,6:7);
p=p1';t=t1';
=premnmx(p,t)
%设置网络隐单元的神经元数(5~30验证后5个最好)
n=5;
%建立相应的BP网络
pause
clc
net=newff(minmax(pn),,{'tansig','purelin'},'traingdm');
inputWeights=net.IW{1,1};
inputbias=net.b{1};
layerWeights=net.IW{1,1};
layerbias=net.b{2};
pause
clc
% 训练网络
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=200000;
net.trainParam.goal=1e-3;
pause
clc
%调用TRAINGDM算法训练BP网络
net=train(net,pn,tn);
%对BP网络进行仿真
A=sim(net,pn);
E=A-tn;
M=sse(E)
N=mse(E)
pause
clc
p2=[1046.20 1046.05 1.52 1.538 0.75;
1046.05 1046.85 1.538 1.510 0.75;
1046.85 1046.60 1.510 1.408 0.75;
1046.60 1046.77 1.408 1.403 0.75;
1046.77 1047.18 1.403 1.319 0.75];
p2=p2';
p2n=tramnmx(p2,minp,maxp);
a2n=sim(net,p2n);
a2=postmnmx(a2n,mint,maxt)
echo off
pause
clc

mzy 发表于 2008-9-14 09:39

回复 沙发 frogfish 的帖子

你给出的例子中训练样本p还是和测试样本矩阵p2的行数一样啊
我训练样本18*21,测试样本就得有18行?

frogfish 发表于 2008-9-14 10:11

原帖由 mzy 于 2008-9-14 09:39 发表 http://www.chinavib.com/forum/images/common/back.gif
你给出的例子中训练样本p还是和测试样本矩阵p2的行数一样啊
我训练样本18*21,测试样本就得有18行?

上贴已经回答你了,是这样的,如果行数不同那就不是同类样本了

mzy 发表于 2008-9-14 15:42

回复 地板 frogfish 的帖子

谢谢明白了
你的训练样本和测试样本均是转置后输入函数的,而我则输入前没有转导致行数不一致

frogfish 发表于 2008-9-15 09:18

这个转置经常有人忘掉

killzjh 发表于 2009-1-4 19:08

layerWeights=net.IW{1,1};
是不是应为layerWeights=net.LW{2,1};???????
我不懂请教
页: [1]
查看完整版本: 神经网络数据归一化疑问