本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
本文展示如何使用matlab实现一个感知机的训练,并展示运行结果
通过本代码可以更具体的理解感知机神经网络模型
本节展示一个简单的感知机代码实现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