DL学习笔记1—BP算法的matlab代码学习

来源:互联网 发布:淘宝哪家杂货铺好 编辑:程序博客网 时间:2024/06/08 14:59

声明:文中的两个案例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神经网络工具

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

这里写图片描述

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个,激活函数是线性函数%训练函数是梯度下降函数traingdnet=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算法监督学习2clear;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 onscatter(X,Y2,'r','fill');

这里写图片描述

这里写图片描述

这里写图片描述

0 0
原创粉丝点击