1.0000 1.0000 1.0000 0.9982 0.9658 0.9981
wij =
3.5796 2.0282 2.5985 5.3497 -0.4644 2.5773
5.5337 -0.4516 -1.6788
wki =
1.5490 6.1430 5.8803 2.0593 1.3288 3.8144
由仿真结果可以看出,网络在第八步就可以得到满足误差函数的输出,输出时OK。 由于初始权值是随机给定的,因此每次运行结果可能有所差异。
2.2用BP网路逼近sin函数:
function [ output_args ] = BP1( input_args ) %UNTITLED Summary of this function goes here % Detailed explanation goes here
%P=[0 1 2 3 4 5 6 7 8 9 10]; %T=[0 1 2 3 4 3 2 1 2 3 4]; P=-1:0.1:1; %输入范围 T=sin(pi*P); %样本值
net=newff([0 10],[5,1],{'tansig','purelin'}); %建立网络 %net=newff([0 10],[5,1],{'tansig','purelin'},'traingd','learngd','msereg'); %net=newff([0 10],[5,1],{'tansig','purelin'},'traingdx','learngd','msereg'); net.trainParam.epochs=200; %训练步长为200 net=train(net,P,T); %开始训练 figure;
Y=sim(net,P); %输入下网络的输出
plot(P,T,'+',P,Y,'o') %将样本与实际输出作图显示 end
逼近结果:
1.510.50-0.5-1-1.5-1-0.8-0.6-0.4-0.200.20.40.60.81
其中+为目标值,O为实际输出值,从逼近小姑来看,效果还是比较理想的。
3 GUI作业:
MATLAB工具箱中常用的几类函数: 前向网络创建函数:
newcf 创建级联前向网络 newff 创建前向BP网络
newffd 创建存在输入延迟的前向网络 传递函数:
logsig S型的对数函数
dlogsig logsig的导函数 tansig S型的正切函数 dtansig tansig的导函数 purelin 纯线性函数
dpurelin purelin的导函数 学习函数:
learngd 基于梯度下降法的学习函数 learngdm 梯度下降栋梁学习函数 训练函数:
trainbrBayes 规范化BP训练函数
trainc 循环顺序渐增训练函数
traincgb Powell-Beale连接梯度BP训练函数 traincgf Fletcher-Powell连接梯度BP训练函数
traincgp Polak-Ribiere连接梯度BP训练函数 traingda 自适应lrBP的梯度递减训练函数
traingdx 动量及自适应lrBP的梯度递减训练函数 trainlm Levenberg-Marquardt BP训练函数 trainoss 一步正切BP训练函数
trainr 随机顺序递增更新训练函数 trainrp 带反弹的BP训练函数 trains 顺序递增BP训练函数
trainscg 量化连接梯度BP训练函数 性能函数:
mse 均方误差函数
msereg 均方误差规范化函数 显示函数:
plotperf 绘制网络的性能
plotes 绘制一个单独神经元的误差曲面 plotep 绘制权值和阈值在误差曲面的位置 errsurf 计算单个神经元的误差曲面
GUI的应用:
我选择的是建立BP网络逼近sin 函数
首先在MATLAB主窗口 输入nntool即可进入神经网络工具箱
点击下方的creat network or data即可进行输入、目标输出及网络的选择。 1首先输入一个输入X:[-1:0.1:1];
再输入期望输出T:[sin(pi*(-1:0.1:1))]; 2然后建立BP网络如下图所示:
命名为BP1
选取网络形式中选择:前馈BP网络,输入选择X,期望输出选择T, 训练函数选择:TRAINLM(Levenberg-Marquardt BP训练函数) 学习函数选择:LEARNGD(基于梯度下降法的学习函数) 误差计算函数选择MSE(均方误差函数),
神经元传输函数选择:TANSIG( S型的正切函数) 单击creat即可建立网络。 3建立好后进行训练
进入训练界面,选择输入和期望输出,即可进行训练。
训练结果如下:
相关推荐: