matlab中的神经网络输出全是NaN,来个大神帮我看看问题在哪!!!

functionmain()clcclearall;closeall;trainnum=500;testsamnum=500;forcastnum=500;hiddenu... function main()
clc
clear all;
close all;
trainnum=500;
testsamnum=500;
forcastnum=500;
hiddenunitnum=8;%%中间层隐节点数量(暂定)
indim=3;%%网络输入维数
outdim=1;%%网络输出维数

%读入数据
data=load('g:\1.txt');
data=data';
p=data(1:indim,1:trainnum);
t=data(indim+1,1:trainnum);
[trainin,minp,maxp,tn,mint,maxt]=premnmx(p,t);

rand('state',sum(100*clock));
voisevar=0.01;
voise=voisevar*rand(1,trainnum);
trainout=voise+tn;
testin=trainin;
testout=trainout;

maxepochs=50000;
lr=0.035;
e0=0.05*10^(-3);
w1=0.05*rand(hiddenunitnum,indim)-0.1;
b1=0.05*rand(hiddenunitnum,1)-0.1;
w2=0.05*rand(outdim,hiddenunitnum)-0.1;
b2=0.05*rand(outdim,1)-0.1;
errhistory=[];
for i=1:maxepochs
hiddenout=logsig(w1*trainin+repmat(b1,1,trainnum));
networkout=w2*hiddenout+repmat(b2,1,trainnum);
error=trainout-networkout;
sse=sumsqr(error);

errhistory=[errhistory sse];
if sse<e0,break,end

delta2=error;
delta1=w2'*delta2.*hiddenout.*(1-hiddenout);
dw2=delta2*hiddenout';
db2=delta2*ones(trainnum,1);
dw1=delta1*trainin';
db1=delta1*ones(trainnum,1);

w2=w2+lr*dw2;
b2=b2+lr*db2;

w1=w1+lr*dw1;
b1=b2+lr*db1;
end

hiddenout=logsig(w1*trainin+repmat(b1,1,testsamnum));
networkout=w2*hiddenout+repmat(b2,1,testsamnum);
a=postmnmx(networkout,mint,maxt);
x=1:500;
newk=a(1,:);
%figure;
%plot(x,newk,'g',x,t,'*k');
pnew=load('g:\2.txt');
pnew=[91;2;204.49];
pnewn=tramnmx(pnew,minp,maxp);
hiddenout=logsig(w1*pnewn+repmat(b1,1,1));
anewn=w2*hiddenout+repmat(b2,1,1);

anew=tramnmx(anewn,mint,maxt);
fid=fopen('g:\3.txt','wt');
fprintf(fid,'%g\n',anew);
fclose(fid);
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
meng2235
2015-04-28 · TA获得超过1.4万个赞
知道大有可为答主
回答量:4585
采纳率:74%
帮助的人:3161万
展开全部

肯定是公式有错,NaN是not a number的意思,肯定是某个地方写错了。不过,既然是matlab编程,为什么不使用神经网络工具箱呢。附件是一个工具箱的例子。


newff函数的格式为:

net=newff(PR,[S1 S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:

PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;

Si:第i层神经元个数;

TFi:第i层的传递函数,默认函数为tansig函数;

BTF:训练函数,默认函数为trainlm函数;

BLF:权值/阀值学习函数,默认函数为learngdm函数;

PF:性能函数,默认函数为mse函数。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32是一种32位的微控制器,由意法半导体(STMicroelectronics)公司设计和生产。STM32是一种非常常见的嵌入式系统芯片,广泛应用于物联网、汽车、工业控制、医疗设备等领域。STM32具有以下特点:1. 体积小巧:STM... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式