谷歌人工智能写作项目:神经网络伪原创
newff函数建立BP神经网络,历史数据作为样本,例如前n个数据作为输入,输入节点为n。当前数据作为p,输出节点为1。隐层节点根据试凑法得到。
通过matlab的train函数,得到训练好的BP神经网络。再将当前预测点的前n个数据作为输入,输出即为当前的预测值。
。
建立BP神经网络预测模型,可按下列步骤进行:1、提供原始数据2、训练数据预测数据提取及归一化3、BP网络训练4、BP网络预测5、结果分析现用一个实际的例子,来预测2015年和2016年某地区的人口数。
已知2009年——2014年某地区人口数分别为3583、4150、5062、4628、5270、5340万人执行BP_main程序,得到[2015, 5128.呵呵3946380615234375][2016,5100.5797325642779469490051269531]代码及图形如下。
。
这个就只能自己编M文件实现了,给个例子你看看%script:main_batch.m%批量方式训练BP网络,实现性别识别%%清理clearallclc%%读入数据%xlsfile='';[data,label]=getdata();%%划分数据[traind,trainl,testd,testl]=divide(data,label);%%设置参数rng('default')rng(0)nTrainNum=60;%60个训练样本nSampDim=2;%样本是2维的%%构造网络=2;%输入层2个神经元,分别输入身高、体重net.nHidden=3;%3个隐含层节点=1;%1个输出层节点w=2*(rand(net.nHidden,)-1/2);%nHidden*3一行代表一个隐含层节点b=2*(rand(net.nHidden,1)-1/2);net.w1=[w,b];W=2*(rand(,net.nHidden)-1/2);B=2*(rand(,1)-1/2);net.w2=[W,B];%%训练数据归一化mm=mean(traind);%均值平移fori=1:2traind_s(:,i)=traind(:,i)-mm(i);end%方差标准化ml(1)=std(traind_s(:,1));ml(2)=std(traind_s(:,2));fori=1:2traind_s(:,i)=traind_s(:,i)/ml(i);end%%训练SampInEx=[traind_s';ones(1,nTrainNum)];expectedOut=trainl;eb=0.01;%误差容限eta=0.6;%学习率mc=0.8;%动量因子maxiter=2000;%最大迭代次数iteration=0;%第一代errRec=zeros(1,maxiter);outRec=zeros(nTrainNum,maxiter);NET=[];%记录%开始迭代fori=1:maxiterhid_input=net.w1*SampInEx;%隐含层的输入hid_out=logsig(hid_input);%隐含层的输出ou_input1=[hid_out;ones(1,nTrainNum)];%输出层的输入ou_input2=net.w2*ou_input1;out_out=logsig(ou_input2);%输出层的输出outRec(:,i)=out_out';%记录每次迭代的输出err=expectedOut-out_out;%误差sse=sumsqr(err);errRec(i)=sse;%保存误差值fprintf('第%d次迭代误差:%f\n',i,sse);iteration=iteration+1;%判断是否收敛ifsse。
。
下面是几个仿真实验,用了不同的训练函数:1.创建BP网络的学习函数,训练函数和性能函数都采用default值,分别为learngdm,trainlm和mse时的逼近结果:由此可见,进过200次训练后,虽然网络的性能还没有为0,但是输出均方误差已经很小了,MSE=6.72804e-0.06,显示的结果也证明P和T之间非线性映射关系的拟合是非常精确的;2.建立一个学习函数为learnd,训练函数为traingd,和性能函数为msereg的BP网络,来完成拟合任务:可见,经过200次训练后,网络的输出误差比较大,而且网络误差的收敛速度非常慢。
这是由于训练函数traingd为单纯的梯度下降训练函数,训练速度比较慢,而且容易陷入局部最小的情况。结果显示网络精度确实比较差。
3.将训练函数修改为traingdx,该i函数也是梯度下降法训练函数,但是在训练过程中,他的学习速率是可变的在200次训练后,以msereg函数评价的网络性能为1.04725,已经不是很大,结果显示P和T之间非线性关系的拟合情况不错,网络的性能不错。
首先要知道你建立的这个模型的内部逻辑关系。。1,确定隐层数,画出简要模型图。2,确定采用什么样的神经网络来建立模型3.通过测试数据来训练模型。。
4.根据测试训练得到的数据和实际数据进行比对,或者算出误差。从而修改隐层中的权值和阀值。反复重复3-4.。最后得到一个最优的模型。大致是这样。。。楼主说的太概略。。。无法回答清楚请抱歉。
。
clearall;closeall;clc;%p=[205623952600229816341600183714781900239526002298163416001873147819001500260022981634160018731478190015002046];t=[187314781900150020461556];p=[205623952600229816341600];%--归一化输入输出--映射到[0,1]--%pmax=max(p);pmin=min(p);P=(p-pmin)./(pmax-pmin);tmax=max(t);tmin=min(t);T=(t-tmin)./(tmax-tmin);net=newff(P,T,5,{'tansig','purelin'},'traingdx');%--设置训练参数--%=50;=0.05;net.trainParam.epochs=1000;=1e-3;net.divideFcn='';[net,tr]=train(net,P,T);A=sim(net,P);a=A.*(tmax-tmin)+tmin;x=7:12;figureplot(x,t,'+');holdon;plot(x,a,'or');holdoff;xlabel('month');ylabel('**')legend('实际','预测')。