BP算法的matlab代码学习

声明:文中的两个案例matlab源码引用自网络,并非本人所写,在此感谢原作者。原链接http://wenku.baidu.com/view/d8df1821aaea998fcc220e03.html?from=search

1)traingd——梯度下降反向传播

traingd Gradient descent backpropagation.
traingd is a network training function that updates weight and
bias values according to gradient descent.
根据梯度下降法更新权值和偏置。

2)newff :前馈网络创建函数

newff Create a feed-forward backpropagation network.

3) train:训练网络

train Train a neural network.
[NET,TR] = train(NET,X,T) takes a network NET, input data X and target data T and returns the network after training it, and a a training record TR.
返回训练后的网络和训练记录TR

4)sim:利用网络进行仿真

sim Simulate a neural network.
sim(NET,X) takes a network NET and inputs X and returns the outputs Y generated by the network. This syntax is equivalent to NET(X).
返回由网络产生的输出。

5)matlab神经网络工具

这里写图片描述
设置隐藏层的神经元个数:
这里写图片描述

扫描二维码关注公众号,回复: 2291403 查看本文章

这里写图片描述

Matlab实例1:

%BP算法训练:监督学习%
clear;
x=-4:0.01:4; %产生[-4,4]之间的行向量
y1=sin((1/2)*pi*x)+sin(pi*x);%期望输出

%step1:newff前馈网络创建函数
%minmax(x)获取输入x的取值范围,min和max,第一个隐藏层其实相当于对输入进行归一化
%第1个隐藏层含1个神经元,激活函数是tansig,第2个隐藏层含15个,激活函数是tansig,输出层含1个,激活函数是线性函数
%训练函数是梯度下降函数traingd
net=newff(minmax(x),[1,15,1],{'tansig','tansig','purelin'},'traingd'); 
net.trainparam.epochs=6000; %设置最大迭代次数
net.trainparam.goal=0.00001; %设置神经网络训练的目标误差

net=train(net,x,y1); %step2:训练神经网络,返回训练好的网络和误差记录
y2=sim(net,x); %step3:获取BP训练后的实际输出

%Pause  %绘图,原图(蓝色光滑线)和仿真效果图(红色+号点线) 
plot(x,y1);%画出期望图像 
hold on 
plot(x,y2,'r+'); %画出训练得到的图像

1)训练误差出现振荡:
误差
可以看到,神经网络训练的目标误差0.00001,10的负5次方,迭代500次的时候,误差达到了一个最小值即best值,由于没有达到目标误差,所以继续迭代,之后误差逐渐增加,迭代到2000次时,迭代停止。
这里有一个疑问:发生这种情况时,迭代完成之后,采用的结果是Best值还是最后一次迭代的结果。
训练图像与原图像对比
2)训练误差再最大迭代次数内收敛到目标误差
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

%利用BP算法监督学习2
clear;
clc;
%以每3个月的销售量经过归一化处理后作为输入
X=1:1:6;
Y1=[0.5152 0.8173 1;
    0.8173 1 0.7380;
    1 0.7380 0.1390;
    0.7308 0.1309 0.1087;
    0.1309 0.1087 0.3520;
    0.1087 0.3520 0;]';
%以要预测的第4个月的销售量归一化处理后作为目标向量
T=[0.7308 0.1309 0.1087 0.3520 0 0.3761];
net=newff([0 1;0 1;0 1],[5,1],{'tansig','logsig'},'traingd');
net.trainParam.epochs=10000;%设置迭代次数
net.trainParam.goal=0.01;
LP.lr=0.1;
net=train(net,Y1,T);%开始训练
Y2=sim(net,Y1);%获取实际输出

scatter(X,T,'fill');
hold on
scatter(X,Y2,'r','fill');
 

这里写图片描述

这里写图片描述

这里写图片描述

版权声明:欢迎转载,转载注明出处。 https://blog.csdn.net/qq_24421591/article/details/50263073

猜你喜欢

转载自blog.csdn.net/weixin_42296976/article/details/81123843