如何使用matlab编写多输入单输出BP神经网络

做毕设遇到一个问题不会,请教各位大神:我做的是基于BP神经网络的指纹识别,现已将一个指纹特征点提取出来,存在一个.mat文件里。特征点有10个,用的是特征点的横坐标x、纵... 做毕设遇到一个问题不会,请教各位大神:我做的是基于BP神经网络的指纹识别,现已将一个指纹特征点提取出来,存在一个.mat文件里。特征点有10个,用的是特征点的横坐标x、纵标y、该点坐的方向角来标记该特征点。现在我想用这一组特征点来进行训练,BP神经网络的输入为24个特征点的横坐标x、纵标y、该点坐的方向角,输出为1。我的代码如下:
clc;clear;

close all;

p=load('originaldata.txt');

p1=p';

t=[1];

% 训练数据归一化处理

[pn,inputps]=mapminmax(p1);

[tn,outputps]=mapminmax(t);

% 建立网络

net_1=newff(minmax(pn),[6,1],{'tansig','tansig'},'traingdm');

% 当前输入层权值和阈值

inputWeights=net_1.IW{1,1};

inputbias=net_1.b{1};

% 当前网络层权值和阈值

layerWeights=net_1.LW{2,1};

layerbias=net_1.b{2};

% 设置训练参数

net_1.trainParam.epochs=10000;

net_1.trainParam.goal=1e-4;

net_1.trainParam.show=50;

net_1.trainParam.lr=0.05;

net_1.trainParam.mc=0.9;

% 训练网络

[net,tr]=train(net_1,pn,tn);

A=sim(net_1,pn)

% 计算仿真误差

E = tn - A

MSE=mse(E);

% 误差图

figure(1)

plot(E,'- *')

title('BP网络训练误差','fontsize',10)

ylabel('误差','fontsize',10)

xlabel('样本','fontsize',10)
复制代码
但是运行时总是提示以下错误,不知道为什么,请大神指教啊!
??? Error using ==> network.train at 146
Targets are incorrectly sized for network.
Matrix must have 24 columns.

Error in ==> BP1 at 25
[net,tr]=train(net_1,pn,tn);

PS :输入数据如下(original.txt):
142.000000 17.000000 2.000000
205.000000 21.000000 2.000000
160.000000 36.000000 3.000000
196.000000 54.000000 1.000000
57.000000 58.000000 1.000000
128.000000 66.000000 3.000000
88.000000 68.000000 2.000000
232.000000 68.000000 1.000000
184.000000 75.000000 2.000000
45.000000 88.000000 0.000000
展开
 我来答
为理想在挨
2013-06-07 · TA获得超过125个赞
知道答主
回答量:60
采纳率:0%
帮助的人:71.7万
展开全部
在你的代码基础上说了。
clc;clear;

close all;

p=load('originaldata.txt');%你问题最后说的数据文件名跟这个不同。

p1=p';

t=[1];% 这个输出(Targets)应该和输入数据对应,输入数据有10个,输出应该也是10个
所以改为 t是一个1x10的行向量,每个元素对应10个输入数据的输出。不知道你的训练数据的输出是不是都是1?我试了试假设你的数据的输出都是1,所以t=ones(1,10),可以运行。
更多追问追答
追问
感谢你的回答。数据文件名是我打错了。我想要的是:一个指纹上提取了一些特征点,然后用BP网络训练,让其输出一个代号(任意一个数字都可以,可以不是我上面说得1),下次我再次输入另外一组指纹特征点数据时(是同一个人的指纹),同样可以得出是这个人的指纹(即输出同样的代号)。总之,就是对指纹进行分类识别。
像你所说的,将t改为一个全是1的1x10的向量,我试了,不过误差太大了,请问你能帮忙解决吗?谢谢!
追答
那么意思是那10条数据是10个不同的指纹?,如果是的话就把输出改成
t=[1,2,3,4,5,6,7,8,9,10];吧,每个数字代表你的驯良数据的一个指纹。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式