神经网络实例--对正弦函数拟合

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%利用神经网络工具箱对一个正弦函数进行拟合,源码如下:

clc

clear

close all

%-----------------------------------------------

%产生训练样本与测试样本

P1=1:2:200; %训练样本,每一列为一个样本

T1=sin(P1*0.1); %训练目标

P2=1:2:200; %测试样本,每一列为一个样本

T2=sin(P2*0.1); %测试目标

%------------------------------------------------

%归一化

[PN1,minp,maxp,TN1,mint,maxt] = premnmx(P1,T1);

PN2=tramnmx(P2,minp,maxp);

TN2=tramnmx(T2,mint,maxt);

%-------------------------------------------

%设置网络参数

NodeNum = 20; %隐藏节点数

TypeNum = 1; %输出维数

TF1='tansig'; TF2='purelin'; %判别函数(缺省值)

net=newff(minmax(PN1),[NodeNum TypeNum],{TF1 TF2});

%------------------------------------------------------

%指定训练参数

net.trainFcn='trainlm';

net.trainParam.show=20; %训练显示间隔

net.trainParam.lr=0.3; %学习步长-traubgd,traubgdm

net.trainParam.mc=0.95; %动量项系数-traingdm,traingdx

net.trainParam.mem_reduc=1; %分块计算Hessian矩阵(仅对Levenberg-Marquardt算法有效)

net.trainParam.epochs=1000; %最大训练次数

net.trainParam.goal=1e-8; %最小均方误差

net.trainParam.min_grad=1e-20; %最小梯度

net.trainParam.time=inf; %最大训练时间

%-------------------------------------------------------

%训练

net=train(net,PN1,TN1); %训练

%--------------------------------------------------

%测试

YN1=sim(net,PN1); %训练样本实际输出

YN2=sim(net,PN2); %测试样本实际输出

MSE1=mean((TN1-YN1).^2);

MSE2=mean((TN2-YN2).^2);

%-------------------------------------------

%反归一化

Y2=postmnmx(YN2,mint,maxt);

%-----------------------------------------

%结果作图

plot(1:length(T2),T2,'r+:',1:length(Y2),Y2,'bo:'); title('+为真实值,o为预测值');

运行结果图:

相关文档
最新文档