训练一个BP神经网络跟踪一条曲线,最后却越拟合越大,虽然图线形状越来接近单幅值越变越大 5C

图片说明
clear all
clc

inputNums=15; %输入层节点数
outputNums=81; %输出层节点数
hideNums=81; %隐含层节点数
maxcount=100; %最大迭代次数
precision=0.001; %预设精度
alpha=0.85; %学习率
w=rand(inputNums,hideNums); %输入层到隐含层的权值
deltw=zeros(inputNums,hideNums); %权值改变量矩阵
v=rand(hideNums,outputNums); %隐含层到输出层的权值
deltv=zeros(hideNums,outputNums); %权值改变量矩阵
error=zeros(1,outputNums);

in=-4:0.1:4;
expectout=sin(2*in).^2+cos(in.^3); %期望函数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BP神经网络样本训练 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
count=1; %计数器,计算迭代次数
%%%%%%%%%%%%%%%%%%%%%%%%%%% 获得输入和期望输出%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

while (count<=maxcount) %结束条件1(迭代次数)
for i=1:inputNums
x(i)=in(i);

end
for k=1:outputNums
d(k)=expectout(k);

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 计算实际输出值 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for j=1:hideNums
out1=0;
for i=1:inputNums
out1=out1+x(i)*w(i,j); %输入层到隐含层的加权和∑x(i)w(i,j)
end
y1(j)=1/(1+exp(-out1)); %隐含层输出值,f(x)=1/(1+exp(-x))
end
for k=1:outputNums
out2=0;
for j=1:hideNums
out2=out2+y1(j)*v(j,k); %隐含层到输出层的加权和∑y1(j)v(j,k)
end
output(k)=1/(1+exp(-out2)); %实际输出值
end

%%%%%%%%%%%%%%%%%%%%%%% 计算误差函数——最速下降法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

error=0;
for k=1:outputNums             
    error=error+(d(k)-output(k))^2;  
end
error=0.5*error;                     %求均方误差
if(error<precision)                  %结束条件2:(当误差满足给定精度时,跳出循环)
   break;
end 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 权值修正 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for k=1:outputNums
deltk(k)=(d(k)-output(k))*output(k)*(1-output(k)); %输出层误差偏导
end
for j=1:hideNums
temp=0;
for k=1:outputNums
temp=temp+deltk(k)*v(j,k);
end
deltj(j)=temp*y1(j)*(1-y1(j)); %隐含层偏导
end
for j=1:hideNums
for k=1:outputNums
deltv(j,k)=alpha*deltk(k)*y1(j); %输出层权值v的调整量deltv(已乘学习率)
v(j,k)=v(j,k)+deltv(j,k) ; %权值调整

end

end
for i=1:inputNums
for j=1:hideNums
deltw(i,j)=alpha*deltj(j)*x(i); %输入层权值w的调整量
w(i,j)=w(i,j)+deltw(i,j); %权值调整
end
end
count=count+1;

%%%%%%%%%%%%%%%%%&&%%%%%%%%%%%%%% 作图 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:hideNums
out1=0;
for i=1:inputNums
out1=out1+x(i)*w(i,j); %输入层到隐含层的加权和∑x(i)w(i,j)
end
y1(j)=1/(1+exp(-out1)); %隐含层输出值,f(x)=1/(1+exp(-x))
end
for k=1:outputNums
out2=0;
for j=1:hideNums
out2=out2+y1(j)*v(j,k); %隐含层到输出层的加权和∑y1(j)v(j,k)
end
output(k)=out2; %实际输出值
end

figure(1)
subplot(1,2,1),plot(x,d,'r-'),title('训练样本输入输出图');   %红色的曲线   
hold on
hndl=plot(x,output);                                        %BP学习效果、蓝色的线
grid on
hold off
pause(0.2)
subplot(1,2,2),plot(count,error,'b.-'),title('误差曲线图');
hold on 
grid on

end


1个回答

震荡比较大的情况,你可以把学习率(deltav deltak)调整小一些。

qq_43534129
qq_43534129 我把学习率调到0.1,可还是这样
12 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
bp神经网络的c语言实例求解~
1
用keras搭建BP神经网络对数据集进行回归预测,效果和同学的相比很差,麻烦大神指点。新手小白。。。
1
MATLAB怎么实现bp神经网络仿真
0
MATLAB实现bp神经网络代码运行时出问题,是怎么回事?数据代码如下
0
BP神经网络如何提取输入量对输出量的影响,利用LW*IW计算的结果和仿真输出的结果怎么不一致
4
我想请教一下拼多多 anti_content 怎么解析
2
bp神经网络怎么实际应用啊?Python
2
BP神经网络模型,如果要预测数据,是每一个数据都迭代N次吗?
3
BP神经网络的训练函数和学习函数,还有性能函数分别代表什么
1
tensorflow中神经网络优化器问题
2
求大佬做下这题,我没编出来
0
关于Tensorflow的DNN分类器
0
MATLAB 神经网络工具箱 GUI里 如何权值阈值初始化???
0
BP神经网络,relu做激活函数,求大神帮忙
1
请问ap =( int *) &a;这是什么意思?ap++;bp++;为什么要用这两个语句?为什么a,b两个值可以交换?
0
用matlab编写好了利用训练好的bp模型来预测输出的程序,转成exe单独运行老是报错,应该怎么解决呢?
0
求助:用r语言做BP神经网络,之后请问怎样做sensitivity analysis(灵敏度分析),算相对重要性?
3
Java,163邮箱发送失败问题;com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smt
0
bp神经网络使用的数据集应该怎么去处理啊,谢谢大家
0
如何用AUC值评价logistics模型和ANN模型?