声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2337|回复: 4

[编程技巧] BP神经网络输入向量和目标向量的格式问题

[复制链接]
发表于 2008-3-15 11:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
P=[-1,  -2,    3,    1;       -1,    1,    5,  -3];  
% T 为目标矢量   
T=[-1, -1, 1, 1];   
pause;   
clc   
%  创建一个新的前向神经网络   
net=newff(minmax(P),[3,1],{'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 网络   
[net,tr]=train(net,P,T);   
pause   
clc   
%  对 BP 网络进行仿真   
A = sim(net,P)   
%  计算仿真误差   
E = T - A   
MSE=mse(E)   
pause   
clc   
echo off  

上面这个程序运行没有问题,但是下面我把
按行向量写入输入向量P=[0.3459, 0.3548, 0.475, 0.6691, 0.6903;0.3595, 0.3705, 0.4932, 0.6848, 0.7302;0.3574 ,0.3688, 0.4914        0.6809, 0.7258;0.3592, 0.3695, 0.493, 0.6846, 0.7298;0.3198 ,0.3492, 0.4554, 0.6525 0.6486;0.345, 0.3542, 0.4731, 0.6687, 0.6899;0.3481, 0.3579, 0.4776, 0.6742, 0.6957;0.3626, 0.4094, 0.5215 0.7033,0.7915;0.3646, 0.4114, 0.5235, 0.7079, 0.7975;0.344,0.3525, 0.4728, 0.6646, 0.6854]
目标向量Q=[206, 34.5, 7850, 2600;226, 38.5, 7850, 2600;206, 34.5, 7650, 2500;226, 34.5, 7650, 2500;186, 30.5,        7850,2600;206, 34.5, 7450, 2200; 206, 40.5, 7450, 2200;266, 34.5, 7850, 2600;266, 38.5, 7850, 2600; 206, 30.5, 7450, 2400]

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

使用道具 举报

发表于 2008-3-16 18:32 | 显示全部楼层
%  创建一个新的前向神经网络   
net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')  
%  当前输入层权值和阈值   
inputWeights=net.IW{1,1}   
inputbias=net.b{1}   
你写的(3,1)你还指望能输出10*4的矩阵?
你写的代码有问题,输入和输出有问题.

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

评分

1

查看全部评分

 楼主| 发表于 2008-3-16 19:57 | 显示全部楼层
问题找出来了,net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')
     newff()为建立BP神经网络的函数,minmax(pn)表示样本数据经预处理后的网络输入pn的取值范围,[3,1]表示隐层节点数是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?本人在不断学习中,望高人指点!谢谢

评分

1

查看全部评分

发表于 2008-4-6 21:50 | 显示全部楼层
最近与搂主犯了同样的错误!
发表于 2009-3-23 21:51 | 显示全部楼层
在这个问题上,困惑也挺大的,在书上看到过p和t的列数要保持相等,否则在运行过程中会出现错误了。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-6 09:25 , Processed in 0.061178 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表