有关BP神经网络的编程问题,用matlab,希望大家指点一下,谢谢!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关BP神经网络的编程问题,用matlab,希望大家指点一下,谢谢!相关的知识,希望对你有一定的参考价值。
在线等:我是初学者,第一次用matlab编程,关于bp神经网络的,就是先对数据训练,又预测的。编程的过程中遇到了问题,不知道怎么解决,麻烦大家指点一下,有错的地方告诉我。训练的数据一共是18组,每个样本有3个指标,隐含层是5个节点,输出层是1个节点,预测的数据是5组,我的程序如下:
P=[0.4 0.8 1,0.4 0.6 0.4,0. 0.6 0.8,0.6 0.4 0.6,0.3 0.9 0.1,0.4 0.2 0.8,0.6 0.4 0.5,0.5 0.1 0.6,0.2 0.6 0.3,0.08 0.8 0.2,0.2 1 0.5,0.3 0.3 0.6,0.1 0.6 0.03,0.5 0.7 0.3,0.2 0.8 0.4,0.03 0.4 0.3,1 0.3 0.3,0.1 0 0.3] %请问在matlab里输入18组数据,是这样么?
>> T=[34,41,38,44,30,45,49,47,34,32,36,45,30,43,33,28,48,40] %这是输出层的数据,格式这样,对么?
>> net=newff(minmax(P),[5,1],'logsig','purelin','traingdm');%这里面用的函数对么,尤其是traingdm,对么,还是应该用trainlm?
>> net=init(net);
>> net.trainParam.epochs=10000;
>> net.trainParam.mc=0.60;
>> net.trainParam.lr=0.85;
>> net.trainParam.goal=0.03;
>> [net,tr,Y,E]=train(net,P,T);%这步matlab就给出了下面的问号部分,我不明白什么意思,不会改。
??? Error using ==> network.train
Targets are incorrectly sized for network.
Matrix must have 54 columns.
>>A = sim(net,P);
>>E = T - A;
MSE=mse(E)
>>P_test=[0.3 0.7 0.2,0.2 0.6 0,0 0.4 0.6,0.2 0.5 0.1,0.3 0.6 0.1];
>>out=sim(net,P_test) %就到这里,是完整的么?麻烦大家指点。谢谢。
0.4 0.6 0.4;
0. 0.6 0.8;
0.6 0.4 0.6;
0.3 0.9 0.1;
0.4 0.2 0.8;
0.6 0.4 0.5;
0.5 0.1 0.6;
0.2 0.6 0.3;
0.08 0.8 0.2;
0.2 1 0.5;
0.3 0.3 0.6;
0.1 0.6 0.03;
0.5 0.7 0.3;
0.2 0.8 0.4;
0.03 0.4 0.3;
1 0.3 0.3;
0.1 0 0.3]';
T=[34,41,38,44,30,45,49,47,34,32,36,45,30,43,33,28,48,40];
net=newff(minmax(P),[3,5,1],'purelin','logsig','purelin','traingdm');
net=init(net);
net.trainParam.epochs=10000;
net.trainParam.goal=0.03;
net=train(net,P,T);
A = sim(net,P);
E = T - A;
MSE=mse(E);
P_test=[0.3 0.7 0.2;
0.2 0.6 0;
0 0.4 0.6;
0.2 0.5 0.1;
0.3 0.6 0.1]';
out=sim(net,P_test)
这样试试,对是用什么学习函数,只有自己试了,没有成熟的理论。 参考技术A P和T里面的间隔不能用逗号,用分号或者空格都可以的。而且后面都加上分号,至于traingdm和trainlm都是训练函数,是要看跟前面用的传递函数之间的关系确定的,trainlm是系统默认训练函数,运算速度快,适用于比较大的样本,具体要看你的数据组成而定。还有就是用bp神经网络很重要的是确定隐层数,需要反复试验确定,这个是重点,直接关系到你的训练性能。先说明这么多吧 参考技术B P中不同组数据之间用分号隔开,你用逗号,明显不遵守交通规则……
matlab中建立bp神经网络的函数newff的第二个参数的问题
1.newff虽然没有规定输入层神经元个数,那输入层神经元个数是如何确定的?
2.我现在读入了10张图片,把每张图片归一化成了50*20的,并转换成1*1000的行向量,最后生成了10*1000的二维矩阵,然后,我再用eye(10,10)函数制造了一个单位矩阵,那么,这个神经网络的输入层神经元个数到底是由谁确定的?个数是多少?
3.还是上头2里的条件,newff的隐含层当然是2层,那么,每层的神经元个数应该如何确定?个数应为多少?
谢谢各位高手!
输入层是根据你读入数据的维度,自动生成的。
2.我现在读入了10张图片,把每张图片归一化成了50*20的,并转换成1*1000的行向量,最后生成了10*1000的二维矩阵,然后,我再用eye(10,10)函数制造了一个单位矩阵,那么,这个神经网络的输入层神经元个数到底是由谁确定的?个数是多少?
你用来训练神经网络的是哪个矩阵?由训练矩阵的维度确定。
3.还是上头2里的条件,newff的隐含层当然是2层,那么,每层的神经元个数应该如何确定?个数应为多少?
第一层由输入数据维度决定,设为k;第二层神经元个数没有理论依据,一般在k~2*k左右进行实验,根据结果定具体个数;输出层神经元个数由问题决定,如果是要把10张图分成两类,那么就是2个节点。 参考技术A 3.还是上头2里的条件,newff的隐含层当然是2层,那么,每层的神经元个数应该如何确定?个数应为多少?
谢谢各位高手!
以上是关于有关BP神经网络的编程问题,用matlab,希望大家指点一下,谢谢!的主要内容,如果未能解决你的问题,请参考以下文章
matlab中建立bp神经网络的函数newff的第二个参数的问题
请问在matlab中,如何用bp神经网络进行建模,节点的选取有啥规律吗?
用MATLAB做bp神经网络的预测,训练的挺好。但是预测误差很大,是啥原因,怎么解决啊