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 は永遠にループします。コードに何か問題がありますか? 停止基準はどうですか?