1

我需要训练一个神经元感知器来分类两个不同的类别。我在matlab上写了这段代码。

function error = train_perc( PercepClassTraining,eta,weights )

%initialization:

xZero=1;
wZero=0.1;

t=1; % round number
x=[];
y=[];
error=[];
epoch_error=[];
c=1;

    n=1;
    x1=PercepClassTraining(n,1);
    x2=PercepClassTraining(n,2);
    y(n)=(xZero*wZero)+(x1*weights(1))+(x2*weights(2));
    error(n)=PercepClassTraining(n,3)-y(n);


while(error(n)~=0)
        weights(1)=weights(1)+(eta*error(n)*x1);
        weights(2)=weights(2)+(eta*error(n)*x2);


        if(n==2000)
         epoch_error(c)=mean(error);
         error=[];
         c=c+1
         n=1;
        else
            n=n+1;

        end

        y(n)=(xZero*wZero)+(x1*weights(1))+(x2*weights(2));
        error(n)=PercepClassTraining(n,3)-y(n);

end

其中 eta 是学习率,PercepClassTraining 是训练集(2000 个输入)。

当我使用 0.1 作为学习率并使用 [0.01 0.01] 作为初始权重时,它在 epoch #58 收敛,并且没有使用所有训练集。

当我将 eta 设置为 0.01 并将权重设置为 0.1、0.1 时,它会永远循环!代码有什么问题吗?停止标准如何?

4

0 回答 0