1. 感知器结构
单层感知器做为学习神经网络入门中的入门,理解感知器的结构和原理是学习其他神经网络的基础。
单层感知器就是包含一层权值可变的神经网络的感知器模型,可用于解决线性可分的二分类问题。其模型的结构图如下图。
图 1 单层感知器结构图
单层感知器进行模式识别的超平面由下式决定;
例如,当维数 N=2 时,输入向量可表示为平面直角坐标系中的一个点。此时分类超平面是一条直线:
2. 算法步骤
(1)定义变量和参数
(2)
= 学习效率,大于0 小于1;
(3)激活。 输入样本训练,对每个训练样本指定其期望值d。
(4)计算实际输出。
(5) 更新权值向量。
(6) 判断。若满足收敛条件,则算法接受;不满足,n 自增1转至第三步。
3. 简单例
(1) 用简单矩阵创建并训练一个感知器。
matlab代码如下:
%% 清空环境变量
clear all;
clc;
%% 创建感知器
p = [-1,-1;0,1] % 输入数据
t = 1; % 1个输出节点
net = newp(p,t); % 创建感知器
%% 训练
P = [0,0,1,1;0,1,0,1] % 用于训练的输入数据,每列是一个输入向量
T = [0,1,1,1] % 输入数据的期望输出
[net,tr] = train(net,P,T); % train 函数进行训练
newP = [-0.5, 0.9]'; % 第一个测试数据
newT = sim(net,newP) % 第一个测试数据为0
newP = [0.9,0.9]'; % 第二个测试数据
newT = sim(net,newP) % 第二个测试数据的输出
其训练出的神经网络可见下图:
由图可知,创建的感知器网络由2个输入节点,1个输出节点。
(2) 创造一个数子符号感知器
matlab代码
clear all;
clc;
p = [-100,100]; % 输入数据标量 -100 =< x >= 100
t = 1; % 1个输出
net = newp (p,t); % 创建一个感知器
%% 训练集
P = [-50,-28,-10,-5,0,1,20,89,70] % 输入训练
T = [0,0,0,0,1,1,1,1,1]
net = train(net,P,T); % 训练网络
newP = -10:0.2:10
[newT,E,perf] = sim(net,newP)
plot(newP,newT,'LineWidth',1);
其运行结果如下图:
train 函数的 P 参数和 T 参数中,向量都是按列排列的,列数表示输入向量或输出向量的个数,P 的列数和 T 的列数应该相等。
4.
我们会发现实例中代码的过程和第二部分所述的算法步骤不对应,因为其中多数步骤都封装在函数 train 中,可通过matlab中的对话框尽心查看。