欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线性神经网络的应用实例

程序员文章站 2024-03-14 12:20:10
...

线性神经网络的应用实例

形成一个线性方程线性神经网络的应用实例
线性神经网络的应用实例
方程的个数超过了自变量的个数,因此方程没有精确解,只有近似解,用伪逆的方法可以求的权值限量的值:

    P=[0 0 1 1;0 1 0 1];
    P=[ones(1,4);P];%输入向量
    d=[0 0 0 1];%期望值
    Q=pinv(P')*d';

Q =
-0.2500
0.5000
0.5000

用线性网络解:

P=[0 0 1 1;0 1 0 1];
P=[ones(1,4);P];%输入向量
d=[0 0 0 1];%期望值
w=[0 0 0];
lr=maxlinlr(P); %最大学习率
MAX=200;       %最大迭代次数
for i=1:MAX
    fprintf('第%d次迭代\n',i);
    v=w*P;
    y=v;
    disp('线性神经网络的二至输出:')
    yy=y>=0.5;%0.5 为分界点   对最后的分类面有影响
    e=d-y;
    m=zeros(1,MAX);
    m(i)=mse(e);
    fprintf('均方误差: %f\n',m(i));
    dw=lr*e*P';
    fprintf('权值向量:\n');
    w=w+dw
end
%% 显示
plot([0 0 1],[0 1 0],'o');hold on;
plot(1,1,'d');
x=-2:.2:2;
y=1.5-x;  %1/2(x+y)-1/4=1/2(为什么不为零,因为上述是以0.5为二值输出分界点)
plot(x,y);
axis([-0.5 2 -0.5 2])
xlable('x');ylable('ylable');
title('线性神经网络用于求解于逻辑');
legend('0','1','分类面');

线性神经网络的应用实例

使用工具箱函数

%% 定义变量
P=[0 0 1 1;0 1 0 1];
d=[0 0 0 1];%期望值
w=[0 0 0];
lr=maxlinlr(P,'bias'); %最大学习率
%% 线性神经网络实现
net_1=linearlayer(0,lr);%线性神经网络
net_1=train(net_1,P,d);
%% 感知器实现
net_2=newp([-1 1;-1 1],1,'hardlim');
net_2=train(net_2,P,d);
%% 显示
disp('线性网络输出');
Y1=sim(net_1,P);
disp('线性网络二值输出');
YY1=Y1>=0.5;
disp('线性网络最终权值:');
w1=[net_1.iw{1,1},net_1.b{1,1}];
disp('感知器输出');
Y2=sim(net_2,P);
disp('线性网络二值输出');
YY2=Y2>=0.5;
disp('线性网络最终权值:');
w2=[net_2.iw{1,1},net_2.b{1,1}];
%% 绘图
plot([0 0 1],[0 1 0],'o');hold on;
plot(1,1,'d');
x=-2:.2:2;
y1=1/2/w1(2)-w1(1)/w1(2)*x-w1(3)/w1(2);
plot(x,y1,'-');
y2=-w2(1)/w2(2)*x-w2(3)/w2(2);%hardlim 函数以0为阈值
plot(x,y2,'--');
axis([-0.5 2 -0.5 2]);
xlabel('x');ylabel('ylabel')
title('线性神经网络用于求解于逻辑');
legend('0','1','线性神经网路分类面','感知器分', '类面');

线性神经网络的应用实例

实现二值异或

%% 定义变量
p1=[0 0 1 1;0 1 0 1];
p2=p1(1,:).^2;
p3=p1(1,:).*p1(2,:);
p4=p1(2,:).^2;
p=[p1(1,:);p2;p3;p4;p1(2,:)]; %添加非线性成分后的输入向量
d=[0 1 1 0];%期望输出向量
lr=maxlinlr(p,'bias');

%% 线性网络实现
net=linearlayer(0,lr);% 创建线性网络
net=train(net,p,d);%线性网络训练
%% 显示
disp('网络输出');
Y1=sim(net,p)
disp('网络二值输出');
YY1=Y1>=0.5
disp('最终权值');
w1=[net.iw{1,1},net.b{1,1}]

plot([0 1],[0 1],'o','LineWidth',2);
hold on;
plot([0 1],[1 0],'o','LineWidth',2);
axis([-0.1 1.1 -0.1 1.1]);
xlabel('x');ylabel('ylabel');
title('线性神经网络用于求解异或i逻辑');
x=-0.1:.1:1.1;y=-0.1:.1:1.1;
N=length(x);
X=repmat(x,1,N);
Y=repmat(y,N,1);Y=Y(:);%将内部所有元素排到一列
Y=Y';
p=[X;X.^2;X.*Y;Y.^2;Y];
yy=net(p);
y1=reshape(yy,N,N);
v=[0.5 0.5];
[C,h]=contour(x,y,y1,v,'b');
clabel(C,h);% 画等高线的高度
legend('0','1','线性神经网络分类面');

线性神经网络的应用实例

Madaline 解线性不可分问题

%% 第一个神经元
p1=[0 0 1 1;0 1 0 1];
d1=[1 0 1 1];
lr=maxlinlr(p1,'bias');

net1=linearlayer(0,lr);
net1=train(net1,p1,d1);

%% 第二个神经元
p2=[0 0 1 1;0 1 0 1];
d2=[1 1 0 1];
lr=maxlinlr(p2,'bias');

net2=linearlayer(0,lr);
net2=train(net2,p2,d2);

Y1=sim(net1,p1);Y1=Y1>=0.5;
Y2=sim(net2,p2);Y2=Y2>=0.5;
Y=~(Y1&Y2);

%% 显示
disp('最一个神经元最终权值:');
w1=[net1.iw{1,1},net1.b{1,1}];
disp('最二个神经元最终权值:');
w2=[net2.iw{1,1},net2.b{1,1}];
disp('第一个神经元测试输出:')
Y1
disp('第二个神经元测试输出:');
Y2
disp('最终输出:');

%% 绘图
plot([0 1],[0 1],'bo');
hold on;
plot([0 1],[1 0],'d');
x=-2:.2:2;
y1=1/2/w1(2)-w1(1)/w1(2)*x-w1(3)/w1(2);
plot(x,y1,'-');
y2=1/2/w2(2)-w2(1)/w2(2)*x-w2(3)/w2(2);
plot(x,y2,'--');
axis([-0.1 1.1,-0.1 1.1]);
xlabel('x');ylabel('y');
title('Madaline用于求解异或逻辑');
legend('0','1','第一条直线','第二条直线');

线性神经网络的应用实例