您当前的位置: 首页 >  数学

川川菜鸟

暂无认证

  • 2浏览

    0关注

    969博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

数学建模学习(44):BP神经网络经典应用,详细讲解配matlab代码

川川菜鸟 发布时间:2021-09-27 13:51:50 ,浏览量:2

文章目录
    • 题目
    • 解析

题目

要求设计一个BP网络,逼近函数g(x)=1+sin(kpi/2x),实现对该非线性函数的逼近。其中,分别令k=2,3,6进行仿真,通过调用参数得出信号的频率与隐含层借点之间,隐含层节点与函数逼近能力之间的关系。

解析

假设频率参数k=2,绘制逼近的非线性函数的目标函数。 matlab代码如下:

clear all
clc
k=2;
p=[-1:0.5:8];
g=1+sin(k*pi/2*p);
plot(p,g,'-');
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');

运行后得到目标函数图形: 在这里插入图片描述 用newff函数奖励BP网络结构。隐含层神经元数目n可以改变,暂定n=5,输出层有一个神经元。选择隐含层和输出层神经元传递函数分别为tansing函数和purelin函数,网络训练的算法采用Levenberg-Marquardt算法trainlm。

n=5;
net=newff(minmax(p),[n,1],{'tansig','purelin'},'trainlm');
%对于初始网络,可以应用sim()函数观察网络输出
y1=sim(net,p);
figure;
plot(p,g,'-',p,y1,':')
title('为训练网络的输出结果')
xlabel('时间')
ylabel('仿真输出--原函数--')

运行上述代码可以得到网络输出曲线与原函数的比较图: 在这里插入图片描述 因为使用newff函数奖励函数网络时,权值和阙值的初始化是随机的,所以网络输出结构很差,根本达不到毕竟函数的目的,每次运行的结果有时也不同。 应用train()函数对网络进行训练前,需要预先设置网络训练参数。将训练时间设置为200,训练精度设置为0.2,其余参数使用默认值。训练神经网络的matlab代码如下:

net.trainParam.epochs=200;%网络训练时间设置为200
net.trainParam.goal=0.2;%网络训练精度为0.2
net=train(net,p,g);%开始训练网络

运行后得到的误差变化过程如下: 在这里插入图片描述

对于训练好的网络进行仿真:

y2=sim(net,p);
figure;
plot(p,g,'-',p,y1,':',p,y2,'--')
title('训练后网络的输出结果');
xlabel('时间');
ylabel('仿真输出');

绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,如图: 在这里插入图片描述 从图可以看出,相对于没有训练的曲线,经过训练之后的曲线和原始的目标曲线更接近。这说明经过训练后,BP网络对非线性函数的逼近效果更好。 改变非线性函数的频率和BP函数银行层神经元的数目,对于函数逼近的效果要更差一些;隐含层神经元的数目对于网络逼近效果页有一定影响,一般来说,隐含层神经元数目多,则BP网络逼近非线性函数的能力越强。

(暂时写到这,晚上继续编辑本文,做更多的分析)

关注
打赏
1665165634
查看更多评论
立即登录/注册

微信扫码登录

0.0504s