我需要训练一个神经元感知器来分类两个不同的类别。我在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 时,它会永远循环!代码有什么问题吗?停止标准如何?