MATLAB神经网络编程(一)——感知器

《MATLAB神经网络编程》 化学工业出版社 读书笔记
第四章 前向型神经网络 4.1 感知器网络


本文是《MATLAB神经网络编程》书籍的阅读笔记,其中涉及的源码、公式、原理都来自此书,若有不理解之处请参阅原书。


感知器可以说是最早的人工神经网络(Artificial Neural Network,ANN),单层感知器是一个具有一层神经元、采用阈值激活函数的前向神经网络网络。

感知器的输出一般是0或1,当然也可以是-1或+1,实现对输入的矢量进行分类的目的。
前向神经网络(Feed Forword Neural Network):各个神经元接受前级输入,并输出到下一级,无反馈,可用一有向无环图表示。
前馈网络通常分为不同的“层”(layer),第i层的输入只与第i-1层的输入联接。
可见层:输入层(input layer)与输出层(output layer)
隐藏层(hidden layer):中间层。

(一)感知器的结构

单层感知器神经元模型
单层感知器的神经元模型

上图中每一个输入分量pj(j=1,2…..r)通过一个权值分量wj(j=1,2….r)进行加权求和,并作为阈值函数的输入,偏差b的加入使得网络多一个参数,可以作为调节输出的值增加方便。

n=∑ wj*pj+b
a=f(n)

多层感知器的模式如下:
多层感知器

感知器中的函数f称为传输函数,感知器中一般选择阈值函数作为传输函数如
hardlim

hardlims

感知器特别适合解决简单的模式分类(pattern classification)问题。但是单层感知器只能解决线性可分的问题。

(二)感知器的学习
感知器学习的目的是找到合适的权值与阈值,使得感知器的输出、输入之间满足线性可分的函数关系。学习的过程往往很复杂,需要不断的调整权值与阈值,称为“训练”的过程。
若以t表示目标输出,a表示实际输出,则

e=t-a

训练的目的就是使t->a.
一般感知器的传输感受为阈值函数网络的输出a只能是0或1,所以只要网络表达的函数是线性可分的,则函数经过有限次迭代之后,将收敛到正确的权值与阈值,使e=0。
感知器的训练需要提供样本集,每个样本由神经网络的输入向量和输出向量对构成,n个训练样本构成的样本集为:
{p1,t1},{p2,t2}~~~~{pn,tn}
每一步学习过程,对各个神经元的权值与阈值的调整算法是:

训练公式
式子中W为权值向量;b为阈值向量;p为输入向量;k为第k步学习过程。上述学习过程称为标准化感知器学习规则,可以用函数learnp实现。

如果输入向量的取值范围很大,一些输入值太大,而一些输入值太小,按照上述公式学习的时间将会很长。为此,阈值的调整可以继续按照上述公式,而权值的调整可以采用归一化方法,即
公式2
上述归一化学习方式可以使用函数learnpn实现。

(三)感知器的神经网络训练函数

Matlab的神经网络工具箱提供了大量的感知器函数。

newp

newp2

train

learn

sim

上述图片截图自:http://www.docin.com/p-209646585.html
函数的具体使用方式以及原理可以在MATLAB命令窗口中使用命令:help+函数名 查看。

(四)在MATLAB中实现一个简单的感知器
给定样本输入向量P,目标向量T以及需要进行分类的输入向量Q,设计一个单层感知器,对Q进行分类。
源代码如下:

clear all;
P=[-0.6 -0.7 0.8;0.9 0 1];    %输入向量,即训练集
T=[1 1 0];                    %输出向量
net=newp([-1 1;-1 1],1);      %生成感知器,net是返回参数
%返回划线的句柄,下一次绘制分类线时%将旧的删除
he=plotpc(net.iw{1},net.b{1});
net.trainParam.epochs=15;     %设置训练次数最大是15
net=train(net,P,T);           %利用训练集对感知器进行训练
Q=[0.5 0.8 -0.2;-0.2 -0.6 0.6];
Y=sim(net,Q)                  %Y是利用感知器net对Q进行分类的结果
figure;
plotpv(Q,Y);                  %画出输入的结果表示的点
he=plotpc(net.iw{1},net.b{1},he)%画出分类线

训练的过程忽略,下图是最后得到的分类结果图:

P1

P2

由图可知,在经过两次训练后网络目标误差达到要求。

(五)小结
感知器是最简单的神经网络,只适合进行简单的模式分类;感知器只对线性可分的向量集合进行分类,所谓线性可分,是指可以用一条直线(针对二维向量)或者一个平面(针对三维向量)将输入向量分开;对感知器的分析有助于理解更加复杂的神经网络。

  • 22
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
单层感知器神经网络是一种简单神经网络模型,常用于线性分类问题。它基于感知器算法,通过一个线性函数将输入数据映射到输出类别。 在Matlab中,可以使用CSDN(中国最大的IT开发者社区)提供的文档和代码来实现单层感知器神经网络。首先,需要加载神经网络工具箱,该工具箱提供了一些函数和方法用于实现神经网络的建模和训练。 接着,我们需要准备训练数据集和测试数据集,其中包含输入特征和对应的输出类别。可以使用Matlab提供的数据导入工具函数将数据导入到Matlab工作空间中。 接下来,我们可以使用CSDN提供的代码来创建一个单层感知器神经网络模型。该代码使用了Matlab神经网络工具箱提供的函数和方法。 神经网络模型创建后,我们需要对模型进行训练。可以使用Matlab神经网络工具箱中的训练函数对模型进行训练,例如使用梯度下降法或者牛顿法等优化算法进行训练。 训练完成后,我们可以使用测试数据集对模型进行评估,测试模型在新数据上的分类性能。可以使用Matlab提供的评估函数进行分类性能的评估,例如计算准确率、召回率、F1值等指标。 通过以上步骤,我们可以使用Matlab和CSDN提供的工具和代码来实现单层感知器神经网络的线性分类功能。这种简单神经网络模型在一些简单的线性分类问题上具有良好的性能,但对于复杂的非线性分类问题可能不够有效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值