其它神经网络

【代码】感知机的代码实现

作者 : 老饼 发表日期 : 2023-02-28 02:39:44 更新日期 : 2023-03-01 14:24:38
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



本文展示如何使用matlab实现一个感知机的训练,并展示运行结果

通过本代码可以更具体的理解感知机神经网络模型



  01. 感知机代码实现  



本节展示一个简单的感知机代码实现Demo



     感知机代码实现Demo    


下面是使用matlab自行实现的一个感知机Demo
 matlab2014b中已跑通
% 本代码展示一个感知机模型的训练DEMO
% ----------训练数据-------------------
X = [0 0 0.2 1 1 0.8; 0 1 0.5 0 1 0.3];
y = [-1 -1 -1 1 1 1 ];

%----------参数设置与常量计算-----------------
[in,sn] = size(X);    % 输入个数与样本个数
goal    = 0;          % 训练目标
lr      = 0.1;        % 学习率
epochs  = 100;        % 最大训练步数

% --------初始化权重---------------
w = zeros(1,in); % 初始化权重
b = 0;           % 初始化阈值

% ----------感知机训练---------------------
for i = 1:epochs
    % 逐样本训练
    for j = 1:sn
        cur_x = X(:,j);                 % 当前训练样本
        cur_y = y(:,j);
        py =  2*((w*cur_x+b)>=0)-1;     % 当前训练样本的预测值
        if(py~=cur_y)
            w = w + lr*cur_y*cur_x';
            b = b + lr * cur_y;
        end
    end
    % 如果误差达到目标,则退出训练
    e   = sum(( 2*((w*X+b)>=0)-1 )~=y)/sn;      % 计算误差    
    if e<=goal
       break; 
    end
end

% -------------绘制结果----------------------
x_line = [min(X(1,:)),max(X(1,:))];
y_line =(-w(1)*x_line-b)/w(2);
plot(x_line,y_line)
hold on
plot(X(1,y==1),X(2,y==1),'bo')
hold on
plot(X(1,y==-1),X(2,y==-1),'k*')
hold on
axis([min(X(1,:))-1 max(X(1,:))+1 min(X(2,:))-1 max(X(2,:))+1]) 





     运行结果     


 
在结果中可以看到,感知机模型把两类样本点完美地分开











 End 









联系老饼