主要内容

归一化感知器规则

训练一个2输入硬极限神经元,将5个输入向量分为两类。尽管一个输入向量比其他输入向量大得多,但使用LEARNPN进行训练是很快的。

X中的五个列向量中的每一个都定义了一个2元素的输入向量,行向量T定义了向量的目标类别。用PLOTPV画出这些向量。

X = [-0.5 -0.5 +0.3 -0.1 -40;...-0.5 +0.5 -0.5 +1.0 50];T = [1 1 0 0 1];plotpv (X, T);

请注意,4个输入向量的幅度比图中左上方的第五个向量小得多。感知器必须正确地将X中的5个输入向量分为T定义的两类。

PERCEPTRON使用LEARPN学习规则创建了一个新的网络,它对输入向量大小的大变化不像LEARNP(默认值)那么敏感。

然后使用输入数据和目标数据对网络进行配置,从而得到其权重和偏差的初始值。(通常不需要配置,因为它是由ADAPT和TRAIN自动完成的。)

网络=感知器(“hardlim”“learnpn”);net =配置(net,X,T);

将神经元对分类的初始尝试添加到图中。

初始权重被设置为零,因此任何输入都给出相同的输出,分类线甚至不会出现在图上。不要害怕……我们要训练它!

持有linehandle = plotpc(net.IW{1},net.b{1});

ADAPT返回一个作为更好的分类器执行的新网络对象、网络输出和错误。这个循环允许网络适应,绘制分类线,并持续到误差为零。

E = 1;(sse(E)) [net,Y,E] = adapt(net,X,T);linehandle = plotpc(net.IW{1},net.b{1},linehandle);drawnow;结束

请注意,用LEARNP训练只需要3个epoch,而用LEARNPN解决同样的问题需要32个epoch。因此,当输入向量大小有很大变化时,LEARNPN比LEARNP做得更好。

现在SIM可以用来对任何其他输入向量进行分类。例如,对输入向量[0.7;1.2]。

这个新点与原始训练集的图显示了网络的表现。为了将其与训练集区分开来,请将其涂成红色。

X = [0.7;1.2);Y = net(x);plotpv (x, y);圆圈= findobj(gca,“类型”“行”);圆。颜色=“红色”

打开“保持”,这样以前的情节就不会被擦除。在图中添加训练集和分类线。

持有;plotpv (X, T);net.b plotpc (net.IW {1}, {1});持有

最后,放大你感兴趣的区域。

感知器正确地将我们的新点(红色)分类为类别“0”(用圆圈表示),而不是“1”(用加号表示)。感知器在更短的时间内正确地学习,尽管有异常值(与“异常值输入向量”的例子相比)。

轴([-2 2 -2]);