神经网络分类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一

利用神经网络进行分类

(转载于陕西理工学院数学系中心实验室周涛副教授的工作,在此表示感谢)

一个经过训练的2输入神经元对5个输入向量进行分类(2类)。结合一个例子给出步骤。

实验内容(说明:这里的许多参数都可以更改,希望大家能对这个程序的参数进行修改;同时也欢迎大家提问)

步骤一:

两个长度为5的向量构成输入样本矩阵P,行向量T为指导向量。利用PLOTPV画出这个向量的图像。例如:

P = [-0.5 -0.5 +0.3 -0.1 -4; -0.5 +0.5 -0.5 +1.0 5];

T = [1 1 0 0 1];

plotpv(P,T);//plotpv函数利用感知器的输入向量和监督向量来画输入向量的图像注意:在上面的式子中,4输入向量比5输入向量有更小的数量级,这个感知器必须把P中的5个输入向量分成两类(依赖于T)。

步骤二建立神经网络

MATLAB提供函数newp来创建一个指定的感知器。第一个参数指定了期望的两个输入向量的取值范围,第二个参数指定了只有一个神经元。

net = newp([-40 1;-1 50],1);

注意:这个神经元的激励函数是hardlim函数,也就是阶越函数。取0,1两个值。Hardlim三函数,也就是阶越函数。取-1,1两个值。

步骤三添加神经元的初始化值到分类图

初始化的权值被设为0,因此任何输入都会给出同样的输出,并且分类线不会出现在这个图中,不用害怕,我们会继续训练这个神经网。

hold on

linehandle = plotpc(net.IW{1},net.b{1});//plotpc函数用来画神经网络的分类线

步骤四训练感知器

Matlab提供了adapt函数来训练感知器,adapt函数返回一个新的能更好的执行分类、网络的输出、和误差的神经网络,这个划线函数允许网络从3个角度去调整,画分类线一直到误差为0为止。

E = 1;//E为误差

net.adaptParam.passes = 3;

while (sse(E))//sse函数是用来判定误差E的函数

[net,Y,E] = adapt(net,P,T);//利用输入样本调节神经网net

linehandle = plotpc(net.IW{1},net.b{1},linehandle);//画出调整以后的分类线

drawnow;//延迟一段时间

end

注意:这将会花费感知器的许多时间来训练。这对这样一个简单问题来说时间是非常长的。追究其原因在于outlier vector,尽管需要很长的训练时间,这个感知器仍然适当的学习并且被用于划分别的输入。

步骤五模拟sim

SIM函数能被用来划分任何别的输入向量,例如划分一个输入向量[0.7; 1.2].这个新点的图像为红色,他将用来显示这个感知器如何把这个新点从最初的训练集取分开来。

p = [0.7; 1.2];

a = sim(net,p);//利用模拟函数sim计算出新输入p的神经网络的输出

plotpv(p,a);

circle = findobj(gca,'type','line');

set(circle,'Color','red');

打开Hold,以便于以前的图像不被删除。增加训练装置和分类线在图中。

hold on;

plotpv(P,T);

plotpc(net.IW{1},net.b{1});

hold off;

axis([-2 2 -2 2]);

最后放大感兴趣的区域。这个感知器正确的区分了我们的新点(用红色表示)作为”zero”类(用圆圈表示),而不是”one”类(用+号表示),尽管需要比较长的训练时间,这个感知器仍然适当的进行了学习。想知道在outlier vectors的情况下如何减少训练时间,需要做实验一的优化实验"Normalized Perceptron Rule"

练习1 熟悉并理解plotpv,plotpc函数

The code below defines and plots the inputs and targets for a perceptron:

p = [0 0 1 1; 0 1 0 1];

t = [0 0 0 1];

plotpv(p,t)

The following code creates a perceptron with inputs ranging over the values in P, assigns values to its weights and biases, and plots the resulting classification line.

net = newp(minmax(p),1);

net.iw{1,1} = [-1.2 -0.5];

net.b{1} = 1;

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

newp函数解释

NEWP Create a perceptron.

Syntax

net = newp

net = newp(pr,s,tf,lf)

Description

Perceptrons are used to solve simple (i.e. linearly separable) classification problems.

NET = NEWP creates a new network with a dialog box.

NET = NEWP(PR,S,TF,LF) takes these inputs,

PR - Rx2 matrix of min and max values for R input elements. S - Number of neurons.

TF - Transfer function, default = 'hardlim'.

LF - Learning function, default = 'learnp'.

Returns a new perceptron.

The transfer function TF can be HARDLIM or HARDLIMS. The learning function LF can be LEARNP or LEARNPN.

Examples

This code creates a perceptron layer with one 2-element input (ranges [0 1] and [-2 2]) and one neuron. (Supplying only two arguments to NEWP results in the default perceptron learning function LEARNP being used.)

net = newp([0 1; -2 2],1);

Now we define a problem, an OR gate, with a set of four

2-element input vectors P and the corresponding four

1-element targets T.

P = [0 0 1 1; 0 1 0 1];

T = [0 1 1 1];

Here we simulate the network's output, train for a maximum of 20 epochs, and then simulate it again.

Y = sim(net,P)

net.trainParam.epochs = 20;

net = train(net,P,T);

Y = sim(net,P)

Notes

Perceptrons can classify linearly separable classes in a

相关文档
最新文档