1.  感知器结构

     单层感知器做为学习神经网络入门中的入门,理解感知器的结构和原理是学习其他神经网络的基础。

     单层感知器就是包含一层权值可变的神经网络的感知器模型,可用于解决线性可分的二分类问题。其模型的结构图如下图。

单层感知器神经网络题目 单层感知器算法_测试数据

                                                                              图 1 单层感知器结构图

      单层感知器进行模式识别的超平面由下式决定;

                                                                                  

      例如,当维数 N=2 时,输入向量可表示为平面直角坐标系中的一个点。此时分类超平面是一条直线:

                                                                             

单层感知器神经网络题目 单层感知器算法_神经网络_02

2. 算法步骤

     (1)定义变量和参数

     (2)

单层感知器神经网络题目 单层感知器算法_单层感知器神经网络题目_03

= 学习效率,大于0 小于1;

     (3)激活。 输入样本训练,对每个训练样本指定其期望值d。

     (4)计算实际输出。

                             

单层感知器神经网络题目 单层感知器算法_单层感知器神经网络题目_04

       (5)  更新权值向量。

                             

单层感知器神经网络题目 单层感知器算法_感知器_05

       (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) % 第二个测试数据的输出

其训练出的神经网络可见下图:

单层感知器神经网络题目 单层感知器算法_感知器_06

由图可知,创建的感知器网络由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);

其运行结果如下图:

单层感知器神经网络题目 单层感知器算法_神经网络_07

单层感知器神经网络题目 单层感知器算法_神经网络_08

train 函数的 P 参数和 T 参数中,向量都是按列排列的,列数表示输入向量或输出向量的个数,P 的列数和 T 的列数应该相等。

 

4. 

       我们会发现实例中代码的过程和第二部分所述的算法步骤不对应,因为其中多数步骤都封装在函数 train 中,可通过matlab中的对话框尽心查看。