wxywan368 发表于 2008-3-15 11:46

BP神经网络输入向量和目标向量的格式问题

P=[-1,-2,    3,    1;       -1,    1,    5,-3];
% T 为目标矢量   
T=[-1, -1, 1, 1];   
pause;   
clc   
%创建一个新的前向神经网络   
net=newff(minmax(P),,{'tansig','purelin'},'traingdm')
%当前输入层权值和阈值   
inputWeights=net.IW{1,1}   
inputbias=net.b{1}   
%当前网络层权值和阈值   
layerWeights=net.LW{2,1}   
layerbias=net.b{2}   
pause   
clc   
%设置训练参数   
net.trainParam.show = 50;   
net.trainParam.lr = 0.05;   
net.trainParam.mc = 0.9;   
net.trainParam.epochs = 1000;   
net.trainParam.goal = 1e-3;   
pause   
clc   
%调用 TRAINGDM 算法训练 BP 网络   
=train(net,P,T);   
pause   
clc   
%对 BP 网络进行仿真   
A = sim(net,P)   
%计算仿真误差   
E = T - A   
MSE=mse(E)   
pause   
clc   
echo off

上面这个程序运行没有问题,但是下面我把
按行向量写入输入向量P=
目标向量Q=

输入向量为10x5矩阵,输出向量为10x4矩阵
当程序运行时,提示Matrices all have 1 rows,请教下怎么实现上面输入与输出的bp实现。
望各位可以不吝赐教,先谢谢!

F117_ren_0 发表于 2008-3-16 18:32

%创建一个新的前向神经网络   
net=newff(minmax(P),,{'tansig','purelin'},'traingdm')
%当前输入层权值和阈值   
inputWeights=net.IW{1,1}   
inputbias=net.b{1}   
你写的(3,1)你还指望能输出10*4的矩阵?
你写的代码有问题,输入和输出有问题.

[ 本帖最后由 F117_ren_0 于 2008-3-16 18:35 编辑 ]

wxywan368 发表于 2008-3-16 19:57

问题找出来了,net=newff(minmax(P),,{'tansig','purelin'},'traingdm')
   newff()为建立BP神经网络的函数,minmax(pn)表示样本数据经预处理后的网络输入pn的取值范围,表示隐层节点数是3,输出层节点数是1,{'tansig','purelin'}表示隐含层中的神经元采用tansig转换函数,输出层采用purelin函数,'traingdm'表示选择的学习算法。
我的矩阵输出矩阵是10*4,输出层节点数应该为4,隐含层节点数可参考下式:m=(p+q)0.5+a, 其中m为隐层节点数。隐层节点应该为1-10之间的常数,我更改为10.
    还有楼上仁兄提出的输入和输出问题,后来经多方面查证,是我的矩阵没有做归一化处理,误差得不到收敛。最后对其进行归一化处理后,并把输出矩阵改成10*5,模型收敛!
感谢楼上的提示和指导!
并想继续请教,对于输入矩阵和输出矩阵之间是否存在格式上的对应关系,比如10*5,就必须是10*x?本人在不断学习中,望高人指点!谢谢

vccvcvccv 发表于 2008-4-6 21:50

最近与搂主犯了同样的错误!

jjwei2003 发表于 2009-3-23 21:51

在这个问题上,困惑也挺大的,在书上看到过p和t的列数要保持相等,否则在运行过程中会出现错误了。
页: [1]
查看完整版本: BP神经网络输入向量和目标向量的格式问题