首页 > 编程知识 正文

matlab实现神经网络,神经网络 matlab

时间:2023-05-05 11:39:35 阅读:262680 作者:2572

《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(j1,2……r)通过一个权值分量wj(j1,2….r)进行加权求和并作为阈值函数的输入偏差b的加入使得网络多一个参数可以作为调节输出的值增加方便。

n∑ wj*pjb
af(n)

多层感知器的模式如下

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

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

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

et-a

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


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

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

上述归一化学习方式可以使用函数learnpn实现。

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

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

上述图片截图自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]; %输出向量netnewp([-1 1;-1 1],1); %生成感知器net是返回参数%返回划线的句柄下一次绘制分类线时%将旧的删除heplotpc(net.iw{1},net.b{1});net.trainParam.epochs15; %设置训练次数最大是15nettrain(net,P,T); %利用训练集对感知器进行训练Q[0.5 0.8 -0.2;-0.2 -0.6 0.6];Ysim(net,Q) %Y是利用感知器net对Q进行分类的结果figure;plotpv(Q,Y); %画出输入的结果表示的点heplotpc(net.iw{1},net.b{1},he)%画出分类线

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

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。