MATLAB多层神经网络构建 多输入神经网络在MATLAB中的实现

首先是对matlab工具箱中函数的介绍:

  • newp函数

newp函数可以根据提供的信息自动生成一个神经网络。

登录后复制

net=newp(P, T, TF, LF);

net是生成的感知机神经网络;

P为一个R×2的矩阵,其中R为该感知器神经网络输入向量的维数,也即行数。矩阵的每一行代表输入向量这一行的取值范围,如P=[-1 1;0 1],则代表输入向量为2维向量,取值范围分别为(-1,1)和(0,1);

T表示该感知器网络激活的神经元个数;

TF表示感知器的激活函数,默认值是硬限幅激活函数hardlim;

LF表示网络的学习函数,默认值是learnp。
 



  • train函数

train函数用于训练创建好的神经网络,直接将网络和输入、输出放入该函数就可以自动训练。

登录后复制

[NET, tr, Y, E, Pf, Af] = train(net, P, T, Pi, Ai, VV, TV)

net:等待训练的网络

P:网络的输入向量矩阵

T:网络的输出目标矩阵

Pi:初始输入延时,默认值为0

Ai:初始层延时,默认值为0

VV:验证矢量

TV:测试矢量

NET:训练完成的网络

tr:训练记录

Y:网络输出矢量

E:误差矢量

Pf:训练终止时的输入延迟状态

Af:训练终止时的层延迟状态



plotpv、plotpc函数

plotpv函数可在坐标图中绘出给定的样本点及其类别,不同的类别可以设置成使用不同的符号。

登录后复制

plotpv(P, T)

P是输入样本矩阵,需提醒的是matlab中以矩阵中的一列为一个输入样本而非一行,所以当你需要输入坐标系中的点时,P应该是2×n的矩阵

T是输出的目标函数值,并且T矩阵设置中的0和1代表着绘制图中对应输入样本点的图案,即T=[0 1 1 0]时,在图中1,4两点为“o”图案,2,3两点为“+”图案

plotpc函数可在坐标图中绘出感知器分类线。



登录后复制

plotpc(net.iw{1,1},net.b{1})

net.iw是神经网络中输入层到下一层网络节点的权值矩阵

net.b是神经网络节点的偏置值



  • sim函数

sim函数可以对神经网络进行仿真。

登录后复制

[Y, Pf, Af, E, perf]=sim(net, P, Pi, Ai, T)

Y:网络输出

Pf、Af、E意义与上文相同

perf:网络性能值

net:待仿真的网络

P、Pi、Ai意义与上文相同

T:目标矢量

接下来,我们以XOR问题为例,展示如何使用matlab搭建感知器神经网络。

XOR 问题,即将如下图所示的四个点按照图案的不同分为两类点。不难看出按照一般的单层感知器线性分类无法将下图情况的分类问题解决,这时我们需要搭建多层感知器解决此类问题。

matlab 多层神经网络 matlab多输入神经网络_matlab 多层神经网络

登录后复制

%%% 输入
P=[0 0 1 1;
   0 1 0 1];
T=[0 1 1 1;
   1 1 1 0];
   



设置P输入向量矩阵和T输出目标矩阵,使用plotpv函数绘制图案。其中输出目标矩阵T的设置是根据双层感知器解决XOR问题原理设置的,这里就不再赘述了。

matlab 多层神经网络 matlab多输入神经网络_matlab 多层神经网络_02

       

登录后复制

%%% 第一层网络 2神经元
net1=newp([0 1;0 1],2);
net1=init(net1);
net1.iw{1,1}=[0.8 0.1;
             0.1 0.8];
net1.b{1}=[0.1;0.2];
plotpc(net1.iw{1,1},net1.b{1})


设置第一层感知器网络,其中net.iw,net.b参数都是随机设置的,绘制出图像。

matlab 多层神经网络 matlab多输入神经网络_开发语言_03

       

登录后复制

%%% 第一层网络训练
[net1_out,tr,Y,error]=train(net1,P,T);
plotpv(P,T);
plotpc(net1_out.iw{1,1},net1_out.b{1})


使用train函数训练我们创建的第一层神经网络,绘制出训练后的图案。

matlab 多层神经网络 matlab多输入神经网络_感知器_04


可以看出此时神经网络已将四个点分为了三类,蓝线下方一类点,蓝线、红线中间一类点,红线上方一类点,之后将同一类点归为一个点后,就将线性不可分的XOR问题转化为一个线性可分的问题了,该问题我们使用单层感知器即可完成解答。

登录后复制

%%% 第二次神经网络 1个神经元
T2=[0 1 1 0];
plotpv(T,T2);
net2=newp([0 1;0 1],1);
net2=init(net2);
net2.iw{1,1}=[0.8 0.1];
net2.b{1}=0.1;
plotpc(net2.iw{1,1},net2.b{1})


搭建第二次感知器的神经网络,参数iw、b随机设置,画出图案。

matlab 多层神经网络 matlab多输入神经网络_matlab_05

       

登录后复制

%%% 第二次神经网络训练
[net2_out,tr2,Y2,error2]=train(net2,T,T2);
plotpv(T,T2);
plotpc(net2_out.iw{1,1},net2_out.b{1})


进行训练,需注意第二层网络进行训练的输入矩阵就是第一层网络的输出矩阵,训练完成画出图案。

matlab 多层神经网络 matlab多输入神经网络_matlab_06

可以看出此时网络已完成分类任务。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空