单层感知器神经网络matlab,MATLAB神经网络——单层感知器

目录

单层感知器基础理论知识

MATLAB神经网络工具箱使用例程

算法实现

参考文献

单层感知器基础理论知识

关于单层感知器的理论知识与MATLAB中单层感知器相关函数,在单层感知器--matlab神经网络这篇文章中有详细的讲解。

MATLAB神经网络工具箱使用例程

实例:在下图中,o点的输出值为1,*点的输出值为0。希望能获得一个神经网络,当我们输入一个坐标时,它能给出对应的输出值。

ff71eb2b181e6d2c9508ce18372a2f01.png

根据理论知识,结果将会是一条直线(x1*w1+x2*w2+b=0),他将会把平面分割为两块区域,一块输出值为0,一块输出值为1。使用MATLAB神经网络工具箱求解代码如下:

net = newp([0 1; 0 1],1) %创建一个单层感知器(NEW Perceptron),它有两个输入节点(假设为x1和x2),x1的取值范围是0~1,x2的取值范围是0~1,有一个节点。

P = [0 0 1 1; 0 1 0 1]; %输入样本,在这里是一个2X4的矩阵,矩阵的每一列表示一个样本点

T = [0 1 1 1]; %期望值(输出值),对应输入样本

net.trainParam.epochs = 20; %net是已经创建的神经网络,它本质上是一个对象,在这里修改trainParam的epochs值为20,表示训练最大的迭代次数为20次

net = train(net,P,T); %训练神经网络

%以下为理解‘单层感知器’而做的可视化部分,非求解问题必须代码

Y = sim(net,P);%对训练好的神经网络仿真(simulate),把样本值传入神经网络,观察输出结果于原结果是否一致

b = net.b{1,1}; %我们的目的实际上是为了获得直线(x1*w1+x2*w2+b=0),这里获取b值(它存储在net对象的b参数值里)

w1 = net.IW{1,1}(1); %获取w1值

w2 = net.IW{1,1}(2); %获取w2值

% 绘图

x1 = -1:0.1:2;

x2 = -w1/w2*x1-b;

plot(x1,x2,'k')

hold on

plot(P(1,2:end),P(2,2:end),'ko');

plot(P(1,1),P(2,1),'r*');

axis([-1,2,-1,2])

legend('分类直线','值为1','值为0')

结果如下

ab0e1baa8019de31c0fe8733c0064da7.png

测试神经网络,过程如下(正确性可从上图中观察得出)

>> sim(net,[0.1;0.1])

ans =

0

>> sim(net,[0.5;0.5])

ans =

1

算法实现

根据单层感知器--matlab神经网络文中 “二、学习算法步骤:”,上面的问题可根据算法步骤,用以下MATLAB代码实现(不使用MATLAB神经网络工具箱):

n=0.2; % 学习率

w=[0,0,0];

P = [0 0 1 1; 0 1 0 1];

d=[0 1 1 1]; % 期望输出

P=[ones(1,4);P];

MAX=20; % 最大迭代次数为20次

i=0;

while 1

v=w*P;

x2=hardlim(v); % 实际输出

%更新

e=(d-x2);

ee(i+1)=mae(e);

if (ee(i+1)<0.001) % 判断

disp('we have got it:');

disp(w);

break;

end

% 更新权值和偏置

w=w+n*(d-x2)*P';

if (i>=MAX) % 达到最大迭代次数,退出

disp('MAX times loop');

disp(w);

disp(ee(i+1));

break;

end

i= i+1;

end

figure;

subplot(2,1,1); % 显示待分类的点和分类结果

plot(P(2,2:end),P(3,2:end),'ko');

hold on

plot(P(2,1),P(3,1),'r*');

axis([-1,2,-1,2])

x1=-1:.1:2;

x2=x1*(-w(2)/w(3))-w(1)/w(3);

plot(x1,x2);

legend('值为1','值为0','分类直线');

hold off

subplot(2,1,2); % 显示mae值的变化

x1=0:i;

plot(x1,ee,'o-');

s=sprintf('mae的值(迭代次数:%d)', i+1);

title(s)

参考文献

陈明.MATLAB神经网络原理与实例精解

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值