matlab神经网络.doc
- 文档编号:231289
- 上传时间:2022-10-07
- 格式:DOC
- 页数:20
- 大小:56KB
matlab神经网络.doc
《matlab神经网络.doc》由会员分享,可在线阅读,更多相关《matlab神经网络.doc(20页珍藏版)》请在冰豆网上搜索。
Matlab神经网络工具箱
2010-7-21
今天学的是BP神经网络,首先看的是一个关于非线性函数逼近的例子,最后得出一个心得:
在使用newff函数生成一个新的网络时,神经元的层数和每一层的神经元数会对结果造成不小的影响,一般都采用[n,1]的建立方法,其中n为隐层的神经元数,1为输出层的神经元数。
然后是做了一个识别系统,算是一个较大的神经网络,具体的代码解释和分析如下:
[alphabet,targets]=prprob;
[R,Q]=size(alphabet);
[S2,Q]=size(targets);
S1=10;
[R,Q]=size(alphabet);
[S2,Q]=size(targets);
P=alphabet;
net=newff(minmax(P),[S1,S2],{'logsig','logsig'},'traingdx');
net.LW{2,1}=net.LW{2,1}*0.01;
net.b{2}=net.b{2}+0.01;
其中的proprob是matlab自带的一个生成字母表布尔值的函数。
可以具体查看。
T=targets;
net.performFcn='sse';
net.trainParam.goal=0.1;
net.trainParam.show=20;
net.trainParam.epochs=5000;
net.trainParam.mc=0.95;
[net,tr]=train(net,P,T)
接下来首先进行无噪声训练。
netn.trainParam.goal=0.6;
netn.trainParam.epochs=300;
T=[targetstargetstargetstargets];
forpass=1:
10
P=[alphabet,alphabet,(alphabet+randn(R,Q)*0.1),(alphabet+randn(R,Q)*0.2)];
[netn,tr]=train(net,P,T);
end
接下来是有噪声训练,采用随机数生成影响输入矩阵的方式。
这里收敛的有点慢,在应用于其他系统的时候值得注意。
netn.trainParam.goal=0.1;
netn.trainParam.epochs=500;
netn.trainParam.show=5;
P=alphabet;
T=targets;
[net,tr]=train(netn,P,T)
接下来还进行无噪声训练,可能是前面的逼近情况已经很了理想了,这里只用了0次循环。
。
。
。
。
。
noise_range=0:
.05:
.5; %标准差范围
max_test=100; %噪声信号总数
network1=[];
network2=[];
T=targets;
fornoiselevel=noise_range
errors1=0;
errors2=0;
fori=1:
max_test
P=alphabet+randn(35,26)*noiselevel;
A=sim(net,P);
AA=compet(A);
errors1=errors1+sum(sum(abs(AA-T)))/2;
An=sim(netn,P);
AAn=compet(An);
errors2=errors2+sum(sum(abs(AAn-T)))/2;
end
network1=[network1errors1/26/100];
network2=[network2errors2/26/100];
end
plot(noise_range,network1*100,'--',noise_range,network2*100);
plot(noise_range,network1*100,'--',noise_range,network2*100,'+');
title('识别误差');
xlabel('噪声指标');
ylabel('不同的训练方式');
legend('无噪声训练','有噪声训练');
以上是对系统性能的分析。
这里的compet函数从help上来更像是一个滤波函数,而sum函数则是用来求一个多维矩阵中各行列的和值。
noisyJ=alphabet(:
1)+randn(35,1)*0.2;
plotchar(noisyJ);
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
plotchar(alphabet(:
answer));
这里面plotchar函数就是将布尔值向量转变成具体的字母图形,下上代码是对具体的情况进行识别。
noisyJ=alphabet(:
10)+randn(35,1)*0.2;
subplot(1,2,1);
plotchar(noisyJ)
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
subplot(1,2,2);
plotchar(alphabet(:
answer));
这段代码暴露了系统还不太成熟的一面
noisyJ=alphabet(:
23)+randn(35,1)*0.2;
subplot(1,2,1);
plotchar(noisyJ);
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
subplot(1,2,2);
plotchar(alphabet(:
answer));
同上,这也是一种识别出错的情况。
noisyJ=alphabet(:
4);
subplot(1,2,1);
plotchar(noisyJ);
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
subplot(1,2,2);
plotchar(alphabet(:
answer));
这是不加噪声干扰的情况,识别仍然出错,可见训练还远没有达到要求。
。
。
。
。
目前遇到这种问题只能通过增大训练强度来解决。
。
。
2010-7-22
今天学习的是自组织竞争神经网络。
是一种不是基于标准答案的学习过程,而是一种基于输入数据的归类而实现的数据分析的网络。
下面主要还是来看几个典型的实例:
1.模式分类
X=[01;01];
clusters=8;
points=10;
std_dev=.05;
P=nngenc(X,clusters,points,std_dev);
plot(P(1,:
),P(2,:
),'+r');
title('输入向量');
xlabel('P
(1)');
ylabel('P
(2)');
%以上是为了产生一系列自由排列的8组数据点集,每组有10个数据点
net=newc([01;01],8,.1);
w=net.IW{1};
plot(P(1,:
),P(2,:
),'+r');
holdon;
circle=plot(w(:
1),w(:
2),'ob')
net.trainParam.epochs=7;
net=train(net,P);
w=net.IW{1};
delete(circle);
plot(w(:
1),w(:
2),'ob');
p=[0;.2];
a=sim(net,p)
一开始之所以只有一个蓝圈,是因为网络未加训练,网络权值位于向量中心。
后来通过训练之后已经具备分类的功能,最后得出的结果是输入向量归于第4个输入类别。
2.一维自组织特征映射网络设计
angles=0:
0.5*pi/99:
0.5*pi;
P=[sin(angles);cos(angles)];
plot(P(1,:
),P(2,:
),'+r');
title('输入向量');
xlabel('P
(1)');
ylabel('P
(2)');
net=newsom([01;01],[10]);
cla
w=net.IW{1};
circle=plot(w(:
1),w(:
2),'ob');
title('初始网络权值');
xlabel('w(i,1)');
ylabel('w(i,2)');
net.trainParam.epochs=10;
net=train(net,P);
delete(circle);
plotsom(net.IW{1,1},net.layers{1}.distances)
title('训练后的网络权值');
xlabel('w(i,1)');
ylabel('w(i,2)');
p=[0.5;0.5];
a=sim(net,p)
注意这个网络运行有一定的波动性,不是很稳定。
通过一系列的测试用例,发现目前该网络的精确性还不够强。
3.二维自组织特征映射网络设计
P=rand(2,500);
plot(P(1,:
),P(2,:
),'+r');
axis([-11-11]);
title('输入向量');
xlabel('P
(1)');
ylabel('P
(2)');
net=newsom([01;01],[56]);
cla
plotsom(net.IW{1,1},net.layers{1}.distances)
axis([0101]);
title('初始网络权值');
xlabel('w(i,1)');
ylabel('w(i,2)');
net.trainParam.epochs=1;
net=train(net,P);
cla
plotsom(net.IW{1,1},net.layers{1}.distances)
axis([-11-11]);
title('训练后的网络');
xlabel('w(i,1)');
ylabel('w(i,2)');
p=[0.5;0.3];
a=sim(net,p)
由于初始矩阵具有随机性,所以每次得到的结果存在一定的差异。
4.lvq模式的分类网络设计
P=[-3-2-20000223;01-121-1-21-10];
C=[1112222111];
T=ind2vec(C);
i=1;
cla
fori=1:
10
ifC(i)==1
plot(P(1,i),P(2,i),'+')
holdon
else
plot(P(1,i),P(2,i),'o')
holdon
end
end
title('输入向量');
xlabel('P
(1)');
ylabel('P
(2)');
net=newlvq(minmax(P),4,[.6.4],.1);
holdon
W1=net.IW{1};
plot(W1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 神经网络