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实现。
望各位可以不吝赐教,先谢谢! %创建一个新的前向神经网络
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 编辑 ] 问题找出来了,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?本人在不断学习中,望高人指点!谢谢 最近与搂主犯了同样的错误! 在这个问题上,困惑也挺大的,在书上看到过p和t的列数要保持相等,否则在运行过程中会出现错误了。
页:
[1]