本篇文章主要介绍matlab deep learning工具箱中的一些函数及用法,并尝试使用matlab工具搭建一个多层感知器来解决XOR问题。

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

 

%%% 输入

P=[0 0 1 1;

0 1 0 1];

T=[0 1 1 1;

1 1 1 0];

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

        

%%% 第一层网络 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参数都是随机设置的,绘制出图像。

        

%%% 第一层网络训练

[net1_out,tr,Y,error]=train(net1,P,T);

plotpv(P,T);

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

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

        可以看出此时神经网络已将四个点分为了三类,蓝线下方一类点,蓝线、红线中间一类点,红线上方一类点,之后将同一类点归为一个点后,就将线性不可分的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随机设置,画出图案。

        

%%% 第二次神经网络训练

[net2_out,tr2,Y2,error2]=train(net2,T,T2);

plotpv(T,T2);

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

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

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

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: