0

我有四类输入向量的分类问题。这四类是

A = [1 , 1; 1 ,2];
B = [2,2; -1,0];
C = [-1,-2;2,1];
D = [-1,-2; -1,-2];

我想通过 Matlab 实现这个问题,我使用这个代码:

 C = [-1,-2;2,1];
 A = [1 , 1; 1 ,2];
 B = [2,2; -1,0];
 D = [-1,-2; -1,-2];

 hold on
 grid on

 plot(A(1,:),A(2,:),'bs')
 plot(B(1,:),B(2,:),'r+')
 plot(C(1,:),C(2,:),'go')
 plot(D(1,:),D(2,:),'m*')
 a = [0 1]';
 b = [1 1]';
 c = [1 0]';
 d = [0 0]';
 P = [A B C D];

 T = [repmat(a,1,length(A)) repmat(b,1,length(B)) repmat(c,1,length(C))    repmat(d,1,length(D)) ];
 net = perceptron;
 E = 1;
 net.adaptParam.passes = 1;
 linehandle = plotpc(net.IW{1},net.b{1});
 n = 0;
 while (sse(E))
 n = n+1;
 [net,Y,E] = adapt(net,P,T);
 linehandle = plotpc(net.IW{1},net.b{1},linehandle);
 drawnow;
end

但我的代码不起作用我不知道为什么,请帮助我....

4

1 回答 1

0

正如 thewaywewalk 所建议的那样,问题在于您的while-loop 以及您没有为您希望评估的语句提供足够的检查这一事实。
将您的while-statement 替换为以下两行:

ACCEPTABLE_ERROR = 3.0;
while (sse(E)>ACCEPTABLE_ERROR)

您应该会看到您的脚本在三次迭代后终止。您可以使用ACCEPTABLE_ERROR变量来检查哪种解决方案最适合您。如果你把它设置得太小,你的while循环不会退出,因为语句不会是假的。


对原始while语句的解释:
如果sse(e)返回结果,您曾经评估过的所有内容 - 在每种情况下都会这样做。这就是为什么它从未停止过。


对于sse需要多个输入参数的问题:
这取决于您提供的输入参数。
文档说:

perf = sse(net,t,y,ew) 接受这些输入参数和可选函数参数,

net:神经网络
t:目标向量的
矩阵或元胞数组 y:输出向量的矩阵或元胞数组
ew:误差权重(默认 = {1})

并返回平方和误差。

但是,没有必要提供误差权重 ,ew如源代码所示:

只有前三个参数是必需的。默认的错误权重是 {1},它对所有目标的重要性进行同等加权。

在您的情况下,您应该根据文档调用sse如下:

sse(net,T,Y)  

没有在文档中提及(或者我没有找到它),这等同于您所做的,只需提供网络错误,E如下所示adapt

sse(E)

两者都给出相同的结果。

于 2013-10-07T17:25:58.967 回答