1

2 つの異なるクラスを分類する単一のニューロン パーセプトロンをトレーニングする必要があります。私はこのコードを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] を使用すると、エポック #58 に収束し、すべてのトレーニング セットを使用しません。

eta を 0.01 に設定し、重みを 0.1 に設定すると、0.1 は永遠にループします。コードに何か問題がありますか? 停止基準はどうですか?

4

0 に答える 0