手算以及使用线性神经网络和感知器…

手算以及使用线性神经网络和感知器来实现与逻辑

% and_hand.m   手算实现与逻辑
%% 清理
close all
clear,clc
%% 定义变量
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(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;
plot(x,y)
axis([-0.5,2,-0.5,2])
xlabel('x');                        ylabel('ylabel');
title('线性神经网络用于求解与逻辑')
legend('0','1','分类面');
手算以及使用线性神经网络和感知器来实现与逻辑


% and_linearlayer.m   用线性神经网络和感知器来实现与逻辑, 对比其结果, 理解线性神经网络和感知器的区别
%% 清理
close all
clear,clc
%% 定义变量
P=[0,0,1,1;0,1,0,1] % 输入向量
d=[0,0,0,1] % 期望输出向量
lr=maxlinlr(P,'bias') % 根据输入矩阵求解最大学习率
%% 线性网络实现
net1=linearlayer(0,lr); % 创建线性网络
net1=train(net1,P,d);   % 线性网络训练
%% 感知器实现
net2=newp([-1,1;-1,1],1,'hardlim');     % 创建感知器
net2=train(net2,P,d);   % 感知器学习
%% 显示
disp('线性网络输出')     % 命令行输出
Y1=sim(net1,P)
disp('线性网络二值输出');
YY1=Y1>=0.5
disp('线性网络最终权值:')
w1=[net1.iw{1,1}, net1.b{1,1}]
disp('感知器输出')
Y2=sim(net2,P)
disp('感知器二值输出');
YY2=Y2>=0.5
disp('感知器最终权值:')
w2=[net2.iw{1,1}, net2.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);   % 1/2是区分0和1的阈值
plot(x,y1,'-');
y2=-w2(1)/w2(2)*x-w2(3)/w2(2);      % hardlim函数以0为阈值,分别输出0或1
plot(x,y2,'--');
axis([-0.5,2,-0.5,2])
xlabel('x');                   ylabel('ylabel');
title('线性神经网络与感知器用于求解与逻辑')
legend('0','1','线性神经网络分类面','感知器分类面');
手算以及使用线性神经网络和感知器来实现与逻辑

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值