数学建模智能优化算法之神经网络案例附Matlab代码

您所在的位置:网站首页 matlab神经网络模型 数学建模智能优化算法之神经网络案例附Matlab代码

数学建模智能优化算法之神经网络案例附Matlab代码

2023-08-10 03:32| 来源: 网络整理| 查看: 265

读书使人充实,讨论使人机智,笔记使人准确…。凡有所学,皆成性格。 ———— (英国)培根

使用MATLAB建立前馈神经网络主要会使用到下面3个函数:

newff:前馈神经网络创建函数;

train:训练一个神经网络;

sim:使用神经网络进行仿真。

下面简要介绍这3个函数的用法。

newff函数newff函数语法

语法:net=newff(P,T,[S1 S2…S(N-l)],{TF1 TF2…TFN},BTF,BLF,PF,IPF,OPF,DDF)

P:输入矩阵向量;

T:目标矩阵向量;

[S1 S2…S(N-l)]:神经网络前N-1层每层神经元数;

{TF1 TF2…TFN}:神经网络激活函数,默认为‘tansig’;

BTF:学习规则采用的训练算法,默认为‘trainlm’;

BLF:BP权值/偏差学习函数,默认为‘learngdm’;

PF:性能函数,默认为‘mse’;

IPF:输入处理函数;

OPF:输出处理函数;

DDF:验证数据划分函数。一般在使用过程中设置前7个参数,后3个参数采用系统默认参数即可

常用的激活函数

常用的激活函数有线性函数 f ( x ) = x f(x)=x f(x)=x​该函数的字符串为‘purelin’对数S形转移函数 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1​​ ( 0 < f ( x ) < 1 ) (0 < f(x) < 1) (0'tansig','purelin'},'traingdx'); %%%%%%%%%%%%%%%%%%%%%%%设置训练参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% net.trainParam.show = 50; %显示中间结果的周期 net.trainParam.lr = 0.01; %学习率 net.trainParam.epochs = 1000; %最大迭代次数 net.trainParam.goal = 1e-3; %目标误差 net.divideFcn = ''; %清除样本数据分为训练集、验证集和测试集命令 %%%%%%%%%%%%%%%%%调用 TRAINGDM 算法训练 BP 网络%%%%%%%%%%%%%%%%%% [net,tr]=train(net,P,T); %%%%%%%%%%%%%%%%%%%%%对 BP 网络进行仿真%%%%%%%%%%%%%%%%%%%%%%%%%% A = sim(net,P); %%%%%%%%%%%%%%%%%%%%%%计算预测数据原始值%%%%%%%%%%%%%%%%%%%%%%%%% a = A.*(tmax-tmin)+tmin; %%%%%%%%%%%%%%%%%%%%%绘制实际值和预测值曲线%%%%%%%%%%%%%%%%%%%%%% x=4:12; figure plot(x,t,'+'); hold on; plot(x,a,'or'); hold off xlabel('月份') ylabel('销量') legend('实际销量 ','预测销量');

表中所示为某地区公路运力的历史统计数据表,请建立相应的BP神经网络预测模型,并根据给出的2010年和2011年的数据,预测相应的公路客运量和货运量。 在这里插入图片描述

解:仿真过程如下:

(1)构建一个3层BP神经网络对该地区公路运力进行预测:输入层结点数为3个,隐含层结点数为8,隐含层的激活函数为‘tansig’;输出层结点数为2个,输出层的激活函数为‘purelin’。

(2)采用梯度下降动量和自适应lr算法‘traingdx’训练BP网络,目标误差goal=1×10-3,学习率lr=0.035,最大迭代次数epochs=2000。拟合的历年公路客运量曲线和历年公路货运量曲线分别如图9.6和图9.7所示。预测结果为:2010年公路客运量为4.5277亿人,公路货运量为2.2290亿吨;2011年公路客运量为4.5308亿人,公路货运量为2.2296亿吨。

历年公路客运量拟合曲线

在这里插入图片描述

历年公路货运量拟合曲线

在这里插入图片描述

MATLAB源程序如下:

%%%%%%%%%%%%%%%%%%%%%%运用BP网络预测数据%%%%%%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 %%%%%%%%%%%%%%%%%%%%%%%%%%%%原始数据%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%人数(单位:万人)%%%%%%%%%%%%%%%%%%%%%%%%% sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09... 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63]; %%%%%%%%%%%%%%%%%%%%%%机动车数(单位:万辆)%%%%%%%%%%%%%%%%%%%%%%%% sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2... 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1]; %%%%%%%%%%%%%%%%%%%%公路面积(单位:万平方公里)%%%%%%%%%%%%%%%%%%%% sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36... 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79]; %%%%%%%%%%%%%%%%%%%%%公路客运量(单位:万人)%%%%%%%%%%%%%%%%%%%%%%% glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 ... 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462]; %%%%%%%%%%%%%%%%%%%%%公路货运量(单位:万吨)%%%%%%%%%%%%%%%%%%%%%%% glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 ... 11203 10524 11115 13320 16762 18673 20724 20803 21804]; %%%%%%%%%%%%%%%%%%%%%%%%%%输入数据矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%% p=[sqrs;sqjdcs;sqglmj]; %%%%%%%%%%%%%%%%%%%%%%%%%%目标数据矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%% t=[glkyl;glhyl]; %%%%%%%%%%%%%%%%%%%%%%%%%原始样本归一化%%%%%%%%%%%%%%%%%%%%%%%%%% [P,PSp] = mapminmax(p); [T,PSt] = mapminmax(t); %%%%%%%%%%%%%%%%%%%创建一个新的前向神经网络%%%%%%%%%%%%%%%%%%%%%%% net=newff(P,T,8,{'tansig','purelin'},'traingdx'); %%%%%%%%%%%%%%%%%%%%%%%设置训练参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% net.trainParam.show = 50; %显示中间结果的周期 net.trainParam.lr = 0.035; %学习率 net.trainParam.epochs = 1000; %最大迭代次数 net.trainParam.goal = 1e-3; %目标误差 net.divideFcn = ''; %清除样本数据分为训练集、验证集和测试集命令 %%%%%%%%%%%%%%%%%调用 TRAINGDM 算法训练 BP 网络%%%%%%%%%%%%%%%%%% [net,tr]=train(net,P,T); %%%%%%%%%%%%%%%%%%%%%对 BP 网络进行仿真%%%%%%%%%%%%%%%%%%%%%%%%%% A = sim(net,P); a=mapminmax('reverse',A,PSt); %%%%%%%%%%%%%%%%%%%%优化后输入层权值和阈值%%%%%%%%%%%%%%%%%%%%%%% inputWeights=net.IW{1,1}; inputbias=net.b{1}; %%%%%%%%%%%%%%%%%%%%优化后网络层权值和阈值%%%%%%%%%%%%%%%%%%%%%%% layerWeights=net.LW{2,1}; layerbias=net.b{2}; %%%%%%%%%%%%%%%%%%%%%%%%%时间轴刻度%%%%%%%%%%%%%%%%%%%%%%%%%%%%% x=1990:2009; %%%%%%%%%%%%%%%%%%%%%%%网络输出客运量%%%%%%%%%%%%%%%%%%%%%%%%%%%% newk=a(1,:); %%%%%%%%%%%%%%%%%%%%%%%网络输出货运量%%%%%%%%%%%%%%%%%%%%%%%%%%%% newh=a(2,:); %%%%%%%%%%%%%%%%%%%%绘值公路客运量对比图%%%%%%%%%%%%%%%%%%%%%%%%%% figure plot(x,newk,'r-o',x,glkyl,'b--+') legend('网络输出客运量','实际客运量'); xlabel('年份');ylabel('客运量/万人'); %%%%%%%%%%%%%%%%%%%%%%绘制公路货运量对比图%%%%%%%%%%%%%%%%%%%%%%% figure plot(x,newh,'r-o',x,glhyl,'b--+') legend('网络输出货运量','实际货运量'); xlabel('年份');ylabel('货运量/万吨'); %%%%%%%%%%%%%%%%%%%%%利用训练好的网络进行预测%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%2010年和2011年的相关数据%%%%%%%%%%%%%%%%%%%%% pnew=[73.39 75.55;3.9 4.1;0.98 1.02]; SamNum=size(pnew,2); %%%%%%%%%%%利用原始输入数据的归一化参数对新数据进行归一化%%%%%%%%%%% pnewn=mapminmax('apply',pnew,PSp); %%%%%%%%%%%%%%%%%%%%%%%隐含层输出预测结果%%%%%%%%%%%%%%%%%%%%%%%%% HiddenOut=tansig(inputWeights*pnewn+repmat(inputbias,1,SamNum)); %%%%%%%%%%%%%%%%%%%%%%%输出层输出预测结果%%%%%%%%%%%%%%%%%%%%%%%%% anewn=purelin(layerWeights*HiddenOut+repmat(layerbias,1,SamNum)); %%%%%%%%%%%%%%把网络预测得到的数据还原为原始的数量级%%%%%%%%%%%%%%% anew=mapminmax('reverse',anewn,PSt);


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3