前戏
加载MATLAB自带的噪声信号进行绘图。
1 2 3 4
| >> clear all >> close all >> load noisdopp >> plot(noisdopp)
|
绘制三元函数s=x²+y²+z²的可视化图形。
1 2 3 4 5 6 7 8
| >> clear all; >> x=linspace(-2,2,40); >> y=x; >> z=x; >> [X,Y,Z]=meshgrid(x,y,z); >> s=X.^2+Y.^2+Z.^2; >> slice(X,Y,Z,s,[-1,0,1],[-1,0,1],[-1,0,1]); >> colorbar
|
在MATLAB的命令窗口中输入help nnet,即可得到神经网络工具箱的有关版本信息及函数列表。
感知器神经网络
单层感知器网络不能模拟异或问题,这里用二层感知器神经网络模拟异或函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| >> clear all; %初始化随机感知器层 >> pr1=[0 1;0 1]; %设置随机感知器层输入问题每个元素的值域 >> net1=newp(pr1,3);%定义随机感知器层 %指定随机感知器层权值初始化函数为随机函数 >> net1.inputWeights{1}.initFcn='rands'; %指定随机感知器层阈值初始化函数为随机函数 >> net1.biases{1}.initFcn='rands'; >> net1=init(net1);%初始化随机感知器层 >> iw1=net1.iw{1};%随机感知器层的权值向量 >> b1=net1.b{1};%随机感知器层的阈值向量 %随机感知器层仿真 >> p1=[0 0;0 1;1 0;1 1]';%随机感知器输入向量(训练样本) >> [a1,pf]=sim(net1,p1);%随机感知器层仿真 %初始化第二感知器层 >> pr2=[0 1;0 1;0 1];%设置第二感知器层输入向量每个元素的值域 >> net2=newp(pr2,1);%定义第二感知器层 %训练第二感知器层 >> net2.trainParam.epochs=10; >> net2.trainParam.show=1; >> p2=ones(3,4);%初始化第二感知器层的输入向量 >> p2=p2.*a1;%随机感知器层的仿真输出结果作为第二感知器层的输入向量 >> t2=[0 1 1 0];%第二感知器层的目标向量 %训练第二感知器层 >> [net2,tr2]=train(net2,p2,t2); >> disp('输出训练过程经过的每一步长为:') 输出训练过程经过的每一步长为: >> epoch2=tr2.epoch %输出训练过程经过的每一步长
epoch2 =
0 1 2 3 4 5 6 7 8 9 10
>> disp('输出每一步训练结果的误差为:') 输出每一步训练结果的误差为: >> perf2=tr2.perf %输出每一步训练结果的误差
perf2 =
Columns 1 through 9
0.5000 0.5000 0.5000 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500
Columns 10 through 11
0.2500 0.2500
>> disp('第二感知器层的权值向量为:') 第二感知器层的权值向量为: >> iw2=net2.iw{1}
iw2 =
-1 -1 3
>> disp('第二感知器层的阈值向量为:') 第二感知器层的阈值向量为: >> b2=net2.b{1}
b2 =
-1 %存储训练后的网络 >> save net36 net1 net2 %下面的代码实现二层感知器网络的仿真 >> clear all; %清除工作空间中的变量 >> load net36 net1 net2 %加载训练后的网络 %随机感知器仿真 >> p1=[0 0;0 1;1 0;1 1]'; %随机感知器层输入向量 >> a1=sim(net1,p1); %随机感知器层仿真结果 %输出感知器层仿真,并输出仿真结果 >> p2=ones(3,4);%初始化第二感知器层的输入向量 >> p2=p2.*a1;%随机感知器层的仿真输出结果作为第二感知器层的输入向量 >> a2=sim(net2,p2) %运行程序,输出如下 a2 =
0 1 0 0 %由以上结果可看出所设计的网络可正确模拟“异或”函数的功能
|
设计一个感知器神经网络,完成下列分类,已知:p1=(0.5 -1)T,t1=0; p2=(1 0.5)T,t2=1;p3=(-1 0.5)T,t3=1;p4=(-1 -1),t4=0。
此单层感知器神经网络的结构:1个输入向量,包括2个元素、1个神经元,神经元的传输函数为hardlim。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| >> clear all; >> pr=[-1 1;-1 1]; >> net=newp(pr,1); >> p=[0.5 -1;1 0.5;-1 0.5;-1 -1]'; >> t=[0 1 1 0]; >> [net,tr]=train(net,p,t); >> a = sim(net,p)
a =
0 1 1 0
>> v=[-2 2 -2 2]; >> plotpv(p,a,v); >> plotpc(net.iw{1},net.b{1});
|