求大神解答下这个BP网络训练的MATLAB程序为什么不对

clcclearall%下面俩个参数可变k=1;%设置非线性函数的频率n=10;%设置网络隐单元的神经元数目%定义要逼近的非线性函数p=(-1:0.05:1);t=sin... clc
clear all
%下面俩个参数可变
k=1;%设置非线性函数的频率
n=10;%设置网络隐单元的神经元数目
%定义要逼近的非线性函数
p=(-1:0.05:1);
t=sin(k*pi*p);
plot(p,t,'-');
title('要逼近的非线性函数');
xlabel('输入向量');
ylabel('非线性函数目标输出量');
%建立相应的bp网络
net=newff(p,t,[n,1],{'tansig','purelin'},'trainlm');
%对没有训练的网络进行仿真
y1=sim(net,p);
%训练网络
net.trainParam.epochs=50;%最大训练次数
net.trainParam.goal=50;%训练目标误差
net=train(net,p,t);
%对训练后的网络进行仿真
y2=sim(net,p);
%绘制训练前后仿真结果对比
figure
plot(p,t,'-',p,y1,'--',p,y2,'*')
title('训练前后对比');
xlabel('输入向量');
ylabel('输出向量');
legend('目标函数输出向量','未训练BP网络输出','已训练BP网络输出');
展开
 我来答
lhmhz
高粉答主

2017-04-04 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7264 获赞数:17008

向TA提问 私信TA
展开全部

BP网络训练程序出错问题,有

1、newff()函数使用上有点偏差,newf要求 p取最大最小,既minmax(p),而t是需要的。正确的写法应为

net=newff(minmax(p),[n,1],{'tansig','purelin'},'trainlm');

2、net.trainParam.goal=50;%训练目标误差,这50的误差也太大了(可能是笔误)。

正确的写法应为

net.trainParam.goal=1e-6  %训练目标误差

3、更改代码后运行,得到如下结果

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式