我是神经网络的新手,并试图编写一个没有matlab工具箱的小波神经网络。
对于函数逼近,sigmoid有效函数输出介于0和1之间,为了计算误差,我们使用sum square,这就是我所知道的。
但是在一些迭代之后,结果显示了Matlab中的NaN(不是数字)。也许NN(神经网络)中权重参数的变化并没有显示NaN,最后为任何输入测试NN它显示特定的常数值。
有关NN的更多信息: 3层==> inputLayer中有1个输入,隐藏层中有20个单位,outputLayer中有1个输出
这是代码的一部分:
--------------------------------------------------------
x=0:0.1*pi:pi;
y=sin(x);
HiddenLayer=20;%Number of Units in HiddenLayer
M=size(x,1);%Number of row in InputData
N=size(x,2);%Number of col in InputData
% % -------InitialValues------
w=zeros(1,HiddenLayer);
w(1,:)=1;%Initial
a=zeros(M,HiddenLayer);
a(:,:)=0.4;%Initial
b=zeros(M,HiddenLayer);
b(:,:)=0.5;
miu=0.2;%Number
beta=0.05;%Number
ErrorGoal=0.0001;%Number
%---------------Main--------------------
Iteration=1;
while Iteration<1000
ErrorSave=zeros(1,N);
z=zeros(1,HiddenLayer);
p=zeros(1,HiddenLayer);
multiwp=zeros(1,HiddenLayer);
for u=1:N % for more than one input if needed
% keyboard;
for i=1:HiddenLayer
z(i)=((x(u)-b(i))/a(i));
end
for j=1:HiddenLayer
p(j)=cos(1.75*z(j))*exp((-z(j)^2)/2);
end
for k=1:HiddenLayer
multiwp(k)=w(k)*p(k);
end
sumwp=sum(multiwp);
gTotal=sigmf(sumwp,[1 0]);
Error=0.5*(y(u)-gTotal).^2;
% keyboard;
ErrorSave(u)=Error;
% keyboard;
gradEW=-(y(u)-gTotal).*gTotal.*(1-gTotal)*cos(1.75*z);
gradEB=zeros(M,HiddenLayer);
for m=1:HiddenLayer
gradEB(m)=-(y(u)-gTotal).*gTotal.*(1-gTotal).*(w(m)./a(m)).*exp(-(z(m).^2)/2).*...
((1.75*sin(1.75*z(m)))+(z(m)*cos(1.75*z(m))));
end
gradEA=zeros(M,HiddenLayer);
for o=1:HiddenLayer
gradEA(o)=-(y(u)-gTotal).*gTotal.*(1-gTotal)*z(o).*(w(o)./a(o))*exp(-(z(o).^2)/2).*...
((1.75*sin(1.75*z(o)))+(z(o)*cos(1.75*z(o))));
end
% keyboard;
%------------Updating Parameter ---------------
w=w-(miu*gradEW)+beta*w;
b=b+(miu*gradEB)+beta*b;
a=a+(miu*gradEA)+beta*a;
end
----------------------------------------------------------------------
如果有人可以帮助并在概念或编码中指出我的错误。
祝福:)