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