MATLAB环境下单层感知器神经网络实现逻辑“与”运算设计
一、实验要求:
重点是掌握感知器神经网络的学习算法原理和代码设计方法,应用MATLAB编写感知器神经网络实现逻辑与运算;应用神经网络工具箱设计感知器神经网络实现逻辑与方法。
已知:
训练样本: x1=0011 x2=0101 期望输出:d=0001
激发函数f为阶跃函数,MATLAB使用hardlim 作为阶跃函数。
二、实验内容
2.1 学习算法
2.2 应用MATLAB编写感知器神经网络实现逻辑与运算
2.2.1 代码:
%样本
x1 = [0 0 1 1];
x2 = [0 1 0 1];
%目标值
d = [0 0 0 1];
%权值
w1 = 0;
%权值
w2 = 0;
%阈值
w0 = 0;
%η
a = 0.5;
t = 0;
while 1
t = t + 1;
%计算实际输出
y = zeros(1,4);
for i = 1:4
u = [x1(i);x2(i)];
w = [w1 w2];
s = w*u - w0;
if s >= 0
y(1,i) = 1;
else
y(1,i) = 0;
end
end
%判断是否满足要求
if all(y==d)
disp('模型训练成功')
w1,w2,w0,y
%画图
%画出决策界面
f = @(x,y)w1*x+w2*y-w0
ezplot(f)
axis([-1,2,-1,2])
hold on
plot(x1(1,:),x2(1,:),'*')
break
else
disp(['第',num2str(t),'轮','模型训练失败,继续训练'])
end
%修正权值
w1 = w1 + a*(d-y)*x1';
w2 = w2 + a*(d-y)*x2';
w0 = w0 +a*(d-y)*[-1 -1 -1 -1]';
end
2.3 应用神经网络工具箱设计感知器神经网络实现逻辑与方法
2.3.1 代码:
%训练集
P = [0 0 1 1;0 1 0 1];
x1 = [0 0 1 1];
x2 = [0 1 0 1];
%目标值
T = [0 0 0 1];
%生成感知器
net = newp([0 1;0 1],1);
%net.iw{1};%网络的权值
%net.b{1};%网络的阈值
net.trainParam.epochs=15;
net = train(net,P,T);
w1 = w(1)
w2 = w(2)
w0 = net.b{1}
f = @(x,y)w1*x+w2*y+w0;
ezplot(f);
hold on ;
plot(x1(1,:),x2(1,:),'*');
net.iw{1,1};
%axis([-1,2,-1,2]);
三、运行结果及分析
3.1 应用MATLAB编写感知器神经网络实现逻辑与运算
运行结果:
>> Perceptron
第1轮模型训练失败,继续训练
第2轮模型训练失败,继续训练
第3轮模型训练失败,继续训练
第4轮模型训练失败,继续训练
第5轮模型训练失败,继续训练
模型训练成功
w1 = 0.5000
w2 = 0.5000
w0 = 1
y = 0 0 0 1

3.2 应用神经网络工具箱设计感知器神经网络实现逻辑与方法。
运行结果:
w1 = 2
w2 = 1
w0 = -3
