感知器神经网络设计的基本方法
一.单层感知器神经网络的 MATLAB 仿真程序设计主要包括以下几个方面:
(1)以 newp 创建感知器神经网络
首先根据要解决的问题,确定每个样本的输入向量的取值范围和维数,网络层的神经元数目,传输函数和学习函数等然后予以单层感知器神经网络的创建函数 newp 创建网络。
(2)以 train 训练创建网络
构造训练样本集,确定每个样本的输入向量和目标向量,调用函数 train 对网络进行训练,并根据训练的情况决定是否调整训练参数,以得到满足误差性能指标的神经网络,然后进行存储。
(3)以 sim 对训练后的网络进行仿真
构造测试样本集,加载训练后的网络,调用函数 sim,以测试样本集进行仿真,查验网络的性能。
从以上过程可以看出,重要的感知器神经网络函数有:newp , train 和 sim ,除此之外还涉及 init , trainc , dotprod , netsum , mae , plotpc , plotpv 等。

例1:
设计一单层单输出感知器神经网络,进行二值化图像卡片上数字的奇偶分类。以下两图片中,共5*3个小方格,每个小方块上有笔画,为1,反之为0。该模式可以作为感知器神经网络的输入向量。

数字0-9的表格如下:

数字 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15
0 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1
1 1 1 0 0 1 0 0 1 0 0 1 0 1 1 1
2 1 1 1 1 0 1 0 1 1 1 1 0 1 1 1
3 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1
4 0 1 0 1 1 0 1 1 0 1 1 1 0 1 0
5 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1
6 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1
7 1 1 1 1 0 1 0 1 0 0 1 0 0 1 0
8 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1
9 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

如果我们想让奇数数字输出为0,偶数为1进行分类

我们的分析为:
●网络有 1 个输入向量,包括 15 个元素,相应图像卡片上 15 个小方块的值,输入元素的取值范围为[0 1];
●为单层、单神经元感知器神经网络;
●输出是一个二值向量 0 或 1,它的两种不同取值分别表示分类结果的奇偶情况,所以神经元的传输函数可以取为 hardlim 函数。

MATLAB代码:

clear all ;
%创建感知器神经网络
pr=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];%设置输入,15行2列
net=newp(pr,1); %创建感知器神经网络,有 15 个输入元素,一个神经元
%训练感知器神经网络
%定义 15 *10 的训练样本集输入向量
p=[1 1 1 1 0 1 1 0 1 1 0 1 1 1 1;
1 1 0 0 1 0 0 1 1 0 1 0 1 1 1;
1 1 1 1 0 1 0 1 1 1 1 0 1 1 1;
1 1 1 1 1 1 0 1 1 0 0 1 1 1 1;
0 1 0 1 1 0 1 1 0 1 1 1 0 1 0;
1 1 1 1 1 0 0 1 1 0 0 1 1 1 1;
0 1 1 1 1 0 1 1 1 1 0 1 1 1 1;
1 1 1 1 0 1 0 1 0 0 1 0 0 1 0;
1 1 1 1 0 1 1 1 1 1 0 1 1 1 1;
1 1 1 1 0 1 1 1 1 0 1 1 1 1 0]';
t=[1 0 1 0 1 0 1 0 1 0];%定义 1*10 的目标向量
[net,tr]=train(net,p,t);%训练单层感知器神经网络
iwl=net.IW{1};%输出训练后的权值
bl=net.b{1};%输出训练后的阈值
epochl=tr.epoch; %输出训练过程经过的每一步长
perfl=tr.perf; %输出每一步训练结果的误差
%存储训练后的神经网络
save net1 net

我们将训练完的网络保存为net1,之后通过输入新的数字验证结果

clear all ; %清除所有内存变量
%加载训练后的神经网络
load net1 net
%对训练后的神经网络进行仿真
ptest=[1 1 1 1 0 1 1 0 1 1 0 1 1 0 1; %数字 0,因某种原因,与训练样本不一致
1 1 0 0 1 0 0 1 1 0 1 0 1 1 1]'; %数字 1,与训练样本一致
a=sim(net,ptest) %输出仿真结果

结果为1 0,表示数字0为偶数(尽管存在误差),数字1为奇数。

例2:
在上一个例题的基础上,如果我们想要用两个输出端表示分类结果,a1 a2=1 0,表示偶数;a1 a2=0 1,表示奇数;a1 a2=0 0,表示拒识状态;a1 a2=1 1,表示错识状态。

MATLAB代码:

clear all ; %清除所有内存变量
%创建感知器神经网络
pr=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1]; %设置输入
%向量每个元素的值域(最小值和最大值),因为有 15 个输入,所以有 152 矩阵向量
net=newp(pr,2); %创建感知器神经网络,有 15 个输入元素,2 个神经元
%训练感知器神经网络
%定义 15 *10 的训练样本集输入向量
p=[1 1 1 1 0 1 1 0 1 1 0 1 1 1 1;
1 1 0 0 1 0 0 1 1 0 1 0 1 1 1;
1 1 1 1 0 1 0 1 1 1 1 0 1 1 1;
1 1 1 1 1 1 0 1 1 0 0 1 1 1 1;
0 1 0 1 1 0 1 1 0 1 1 1 0 1 0;
1 1 1 1 1 0 0 1 1 0 0 1 1 1 1;
0 1 1 1 1 0 1 1 1 1 0 1 1 1 1;
1 1 1 1 0 1 0 1 0 0 1 0 0 1 0;
1 1 1 1 0 1 1 1 1 1 0 1 1 1 1;
1 1 1 1 0 1 1 1 1 0 1 1 1 1 0]';
t=[1 0 1 0 1 0 1 0 1 0 ;0 1 0 1 0 1 0 1 0 1]; %定义 2*10 的目标向量矩阵。
[net,tr]=train(net,p,t);%训练单层感知器神经网络
iwl=net.IW{1}; %输出训练后的权值
bl=net.b{1}; %输出训练后的阈值
epochl=tr.epoch; %输出训练过程经过的每一步长
perfl=tr.perf; %输出每一步训练结果的误差
%存储训练后的神经网络
save net2 net

之后我们进行验证

clear all;%清除所有内存变量
%加载训练后的神经网络
load net2 net
%对训练后的神经网络进行仿真
ptest=[1 1 1 1 0 1 1 0 1 1 0 1 1 0 1;%对数字 0,与训练样本不一致1 1 0 0 1 0 0 1 1 0 1 0 1 1 1;%数字 1,与训练样本一致1 1 1 0 1 1 0 1 0 1 1 1 0 0 0;%非数字1 1 1 1 1 0 1 0 1 0 0 0 1 1 1]';%非数字
a = sim(net,ptest) %输出仿真结果

结果如图

二.多层感知器神经网络的设计方法
理论上,对一个二层感知器神经网络,如果第二层的节点可以根据需要任意设置,那么它可以实现任意的二值逻辑函数。
由于感知器神经网络学习规则的限制,它只能对单层感知器神经网络进行训练,那么,如何进行多层感知器神经网络的设计呢?这里提供一种二层感知器神经网络的设计方法:
(l)把神经网络的第一层设计为随机感知器层,且不对它进行训练,而是随机初始化它的权值和阈值,当它接收各输入元素的值时,其输出也是随机的。但其权值和阈值一旦固定下来,对输入向量模式的映射也随之固定下来。
(2)以第一层的输出作为第二感知层的输入,并对应输入模式,确定第二感知层的目标向量,然后对第二感知器层进行训练。
(3)由于第一随机感知器层的输出是随机的,所以在训练过程中,整个网络可能达到训练误差性能指标,也可能达不到训练误差性能指标。所以,当达不到训练误差指标,需要重新对随机感知器层(即,第一层)的权值和阈值进行初始化赋值,可以将其初始化函数设置为随机函数,然后用 init 函数重新初始化。程序一次运行的结果往往达不到设计要求,需要反复运行,直至达到要求为止。

例三:
我们用二层感知器神经网络来实现异或问题,如下表

输入/ p1 p2 输出/a
0 0 0
1 0 1
0 1 1
1 1 0

为什么单层解决不了这个问题呢,我们可以把上面四种情况表示为二维平面的四个点 A0(0,0),A1(1,0),B1(0,1),B0(1,1)。单层的一条直线不可能划分出异或的四种效果。而两条直线就可以做到。

根据以上分析,如果用两层感知器,每层感知器可以构成一条直线划分,则可以解决模拟异或函数的问题。以下图所示二层神经网络来实现,其中隐层为随机感知器层(netl ) ,神经元数目设计为 3,其权值和阈值是随机的,它的输出作为输出层(分类层)的输入;输出层为感知层(net2),其神经元数为 1,这里仅对该层进行训练。

MATLAB代码:

clear,clc %清除所有内存变量
%初始化随机感知器层
pr1=[0 1;0 1]; %设置随机感知器层输入向量每个元素的值域
net1 = newp(pr1,3); %定义随机感知器层:值域和神经元数
net1.inputweights{1}.initFcn ='rands';%指定随机感知器层权值初始化函数为随机函数
net1.biases{1}.initFcn ='rands'; %指定随机感知器层闭值初始化函数为随机函数
net1= init(net1); %初始化随机感知器层
iw1=net1.IW{1} ; %给随机感知器层的权值向量赋值
b1= net1.b{1} ; %给随机感知器层的阈值向量赋值
%随机感知器层仿真
p1 = [ 0 0 ; 0 1 ; 1 0 ; 1 1]'; %随机感知器层输入向量(训练样本值)
[a1,pf]=sim(net1,p1); %随机感知器层仿真
%初始化第二感知器层
pr2=[0 1;0 1;0 1]; %设置第二感知器层输入向量每个元素的值域
net2=newp (pr2,1) ; %定义第二感知器层:值域和神经元数
%训练第二感知器层
net2.trainParam.epochs = 10 ; %
net2.trainParam.show = 1 ; %
p2 = ones (3,4) ; %初始化第二感知器层的输入向量
p2 =p2.*a1 ; %随机感知器层的仿真输出结果作为第二感知器层的输入向量
t2 =[ 0 1 1 0] ; %第二感知器层的目标向量(见异或表)
[net2,tr2]=train( net2,p2,t2) ; %训练第二感知器层
epoch2 =tr2.epoch; %输出训练过程经过的每一步长
perf2=tr2.perf; %输出每一步训练结果的误差
iw2 =net2.IW{1}; %输出第二感知器层的权值向量
b2 =net2 .b{1}; %输出第二感知器层的阈值向量
%存储训练后的网络
save net3 net1 net2

如果得不到正确的结果,可以多运行几次第一段代码,因为随机感知器层的输出是随机的。这样做是因为设计受到感知器的学习算法的限制,对于多层网络,当然有更好的学习算法,比如 BP 网络学习算法。

clear,clc %清除所有内存变量
%加载训练后的网络
load net3 net1 net2
%随机感知器层仿真
p1=[0 0;0 1;1 0;1 1]'; %随机感知器层输入向量(输入向量次序改变)
a1= sim(net1,p1); %随机感知器层仿真结果
%输出感知器层仿真,并输出仿真结果
p2=ones(3,4) ; %初始化第二感知器层的输入向量
p2= p2.*a1 ; %随机感知器层的仿真输出结果作为第二感知器层的输入向量
a2=sim (net2,p2)

4.人工神经网络(一些例题)相关推荐

  1. 人工神经网络的应用实例,人工神经网络简单例题

    什么是神经网络,举例说明神经网络的应用 我想这可能是你想要的神经网络吧! 什么是神经网络:人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs) ...

  2. 2020年人工神经网络第二次作业-参考答案第三题

    如下是 2020年人工神经网络第二次作业 中第三题的参考答案. ➤01 第三题参考答案 1.题目分析 本题实际上是课件中例题的重现问题. 对于7个字符(三种字体),21个训练样本,它们分别属于7大类. ...

  3. 人工神经网络----Hebbian学习规则

    现在我们常用的深度学习神经网络,仅仅是人工神经网络的一个分枝,还有许多其他类型的神经网络. 现在的神经网络主要是基于梯度反向传播(BP)算法更新模型参数,同样BP是一种参数更新方式,但也不是唯一一种. ...

  4. 人工神经网络和神经网络,什么是人工神经网络?

    1.什么是人工神经网络? 一.一些基本常识和原理 [什么叫神经网络?] 人的思维有逻辑性和直观性两种不同的基本方式.逻辑性的思维是指根据逻辑规则进行推理的过程:它先将信息化成概念,并用符号表示,然后, ...

  5. 人工神经网络与Matlab

    人工神经网络与Matlab实现 What is ANN 常用激活函数 神经网络的分类: – 按照连接方式,可以分为:前向神经网络 vs. 反馈(递归)神经网络 – 按照学习方式,可以分为:有导师学习神 ...

  6. 人工神经网络与遗传算法,遗传算法训练神经网络

    神经网络结合遗传算法:求最值问题 5 谷歌人工智能写作项目:神经网络伪原创 遗传算法求解? 遗传算法在很多领域都得到应用:从神经网络研究的角度上考虑,最关心的是遗传算法在神经网络的应用好文案.在遗传算 ...

  7. 人工神经网络的主要特点是什么

    深度学习中什么是人工神经网络? 人工神经网络(Artificial Neural Network,即ANN )是从信息处理角度对人脑神经元网络进行抽象,是20世纪80年代以来人工智能领域兴起的研究热点 ...

  8. 人工神经网络:感知器

    人工神经网络:感知器 1.1 基本概念 1.输入节点:X1={x1,x2,x3,...,xi,...xn},for example,X1=[1 2]'; 2.输出节点:y={y1,y2},for ex ...

  9. 什么是人工神经网络?

    本图文详细介绍了人工神经网络的生物学基础,并在此基础上推导出人工神经网络的数学模型.

  10. 人工神经网络背后的数学原理!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:贾博文,浙江大学,Datawhale原创作者 本文约8000字,建 ...

最新文章

  1. Linux进程管理:进程状态和CPU平均负载
  2. mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本
  3. 北信源管理网页卸载密码_怎么卸载找不到程序的流氓软件?
  4. 读《鸟哥的linux私房菜》有感--第四天
  5. 大型分布式电商系统架构技术总结
  6. centos7镜像在虚拟机上安装centos7详细教程
  7. 萤石云摄像头无设备序列号验证码解决办法
  8. bug的严重程度级别,bug的定义
  9. Matlab c2d离散用法
  10. 编程序找出1000之内的所有完数
  11. Excel函数带你看透身份证号
  12. 三维图形几何变换算法实验_基于深度学习的三维重建算法综述
  13. excel如何把多张表合并成一个表_如何快速把多个excel表格合并成一个excel表
  14. 一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第十次反弹多高
  15. 神经网络一般架构(BP)
  16. java如何连接rfid_Java + Uno + RFID:java中的调用方法读取rfid
  17. Directory /opt/journalnode/lagou is in an inconsistent state: Can‘t format the storage directo
  18. 【一篇入魂】redis快速入门—部署、数据类型、持久化、事务、集群
  19. 64位Windows操作系统下Autocad VBA通用对话框代码
  20. 考研数据结构判断题整合_做题版

热门文章

  1. 关于抖音如何热门,怎么上推荐获取更多的流量,获取更多的抖音粉丝
  2. 用java创建一个最简单的窗口
  3. 夏日PHP图书管理系统 v0.3(源码)
  4. fwrite函数,fread函数和fgets函数详解以及使用方法
  5. js调用摄像头解析二维码
  6. Windows Thin PC体验 语言包更改(win 7 included)
  7. 硬盘分区失败丢失数据如何恢复
  8. 触摸屏显示接口设计-用于便携式热像仪的OMAP双核处理器
  9. Springboot配置Druid数据源详解
  10. Java后台项目开发规范