神经网络技术(MATLAB实现)——感知机网络(仿真补充事项)

单层感知机网络使用说明

注意点一:单层感知机网络只适用于线性神经网络的判别分类

例如,在进行如下代码进行分类时,就难以实现线性分类,原因在于原始问题是非线性的。

clc,clear
P=[-0.5 -0.5 0.3 -0.1 -0.8;-0.5 0.5 -0.5 1 0];
T=[1 1 0 0 0];
plotpv(P,T);
net=newp([-35 1;-2 45],1);
net.adaptParam.passes=4;
linehandle=plotpc(net.iw{1},net.b{1});
for a=1:24
    [net,Y,E]=adapt(net,P,T);
    linehandle=plotpc(net.iw{1},net.b{1},linehandle);
    drawnow;
end

注意点二:在训练感知机网络时,应该使用全训练样本数据集

因为这样可以确保感知机网络的正确性。
例如,下面的代码用于实现三输入的与门,当给原始数据加入0.3的扰动时,原始数据的预测结果是正确的。而加入0.5的扰动时,原始数据的预测结果就出现了很明显的偏差。

clc,clear
%% 输入样本数据
P=[0 0 0 0 1 1 1 1;
    0 0 1 1 0 0 1 1;
    0 1 0 1 0 1 0 1];
T=[0 0 0 0 0 0 0 1];
%% 构建单神经元感知机网络
net=newp([repmat([-1 2],3,1)],1);
%% 训练单神经元感知机网络
E=1;
while sse(E)
    [net,Y,E,Pf,Af,tr]=adapt(net,P,T);
end
%% 训练样本数据增加0.5的扰动
P=P+0.5;
A=sim(net,P);

多层感知机神经网络的设计方法

为了解决线性不可分的输入向量的分类问题,可以增加网络层。
由于感知机神经网络学习规则的限制,它只能对单层感知机神经网络进行训练。这里则提供了一种二层感知机神经网络的设计方法:
(1)把神经网络的第一层设计为随机感知层,且不对它进行训练,而是随机初始化它的权值和阈值,当它接收输入元素的值时,其输出也是随机的。但其权值和阈值一旦固定下来,对输入向量模式的映射也就随之确定下来了。
(2)以第一层的输出作为第二感知层的输入,并对应输入模式,确定第二感知机层的目标向量,然后对第二感知机层进行训练。
(3)由于第一随机感知机层的输出是随机的,所以在训练过程中,整个网络可能达到训练误差性能指标,也可能达不到训练误差性能指标。所以,当达不到训练误差指标时,需要重新对随机感知机层的权值和阈值进行初始化赋值。程序一次运行的结果往往达不到设计要求,需要反复运行,直到达到要求为止。
例如:如下的代码实现了异或门。

clc,clear
%% 初始化随机感知机层
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);
epoch2=TR2.epoch;
perf2=TR2.perf;
IW2=net2.iw{1};
B2=net2.b{1};
%% 存储训练后的网络
save net34 net1 net2

进行仿真:

clc,clear
load net34
P1=[0 0;0 1;1 0;1 1]';
A1=sim(net1,P1);
P2=ones(3,4);
P2=P2.*A1;
A2=sim(net2,P2);

具体的神经网络设计是:
因为输入向量有两个,所以加上一个偏移量总共三个输入量进入到随机感知层(第一层),因此在代码中第一层神经元数目设计为3,其权值和阈值是随机的,它的输出作为输出层(分类层)的输入;输出层为感知机层,其神经元数为1,因为最终需要输出的结果是唯一的。

线性分类中的决策函数与决策边界

感知机神经元的传输函数为阈值型函数,若传输函数为hardlim函数,则决策函数为:
f ( u ) = h a r d l i m ( W p + b ) = { 0 , W p + b < 0 1 , W p + b > = 0 f(u)=hardlim(Wp+b)=\begin{cases} 0, & Wp+b<0 \\ 1, & Wp+b>=0 \\ \end{cases} f(u)=hardlim(Wp+b)={0,1,Wp+b<0Wp+b>=0
其值只有0和1两种情况。
代码实现如下:

clc,clear
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);
p=[0.5 -1;1 0.5;-1 0.5;-1 -1]';
A=sim(net,p);
V=[-2 2 -2 2];
plotpv(p,A,V);
plotpc(net.iw{1},net.b{1});
参考文献

方清城. MATLAB R2016a 神经网络设计与应用28个案例分析. 北京:清华大学出版社,2018.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值