神经网络实例--对正弦函数拟合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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为预测值');
运行结果图: