Matlab实现简单BP神经网络
2014-11-02 19:39
295 查看
实验目的
1)掌握BP神经网络算法的基本设计实现并拟合函数。2)熟练掌握误差反馈对网络权重修正的机理;
3) 分析实验结果来验证理解BP神经网络算法中学习率参数的重要性。
实验内容与步骤
1、BP神经网络结构设计典型的BP神经网络为三层结构:输入层、隐含层和输出层。
输入层接受算法的输入,在本实例中对应为x。输入层节点的个数应当和x的维数对应,在本实例中,输入x为标量,因此输入层节点个数为1。
隐含层结点个数可以自行设定,在本实例中建议为6个。
输出层结点个数应当和输出y的维数对应,在本实例中,输出y为标量,因此输出层节点个数为1。
2、算法基本思路
给定组样本;;;。这里为一维输入矢量,为一维期望输出矢量。假设矢量为网络的实际输出。
则训练过程为:
1) 确定神经网络结构为1-6-1型,选作为最大容许误差,并给出隐层到输出层的权矩阵,输入层到隐层的权矩阵,将其初始化为某一小的随机权矩阵。
2) 依次输入样本,计算网络的实际输出。
3) 计算误差,。
4) 计算各层权值的变化量
5) 调节权值
6) 若,则,转2),否则转7)。
7) 若,结束,否则,,转2)进入下一轮的计算,若直到规定的次数时还没有使,则强行退出,终止程序。
详细步骤
1、打开Matlab2、选择工作目录,此处我选的桌面
3、点击左上角新建一个Script
4、把下面代码复制进去
for i=1:20 %样本个数 xx(i)=2*pi*(i-1)/20; d(i)=0.5*(1+cos(xx(i))); end n=length(xx);%样本个数 p=6; %隐层个数 w=rand(p,2); wk=rand(1,p+1); max_epoch=10000;%最大训练次数 error_goal=0.002;%均方误差 q=0.09;%学习速率 a(p+1)=-1; %training %此训练网络采取1-6-1的形式,即一个输入,6个隐层,1个输出 for epoch=1:max_epoch e=0; for i=1:n %样本个数 x=[xx(i);-1]; neto=0; for j=1:p neti(j)=w(j,1)*x(1)+w(j,2)*x(2); a(j)=1/(1+exp(-neti(j))); %隐层的激活函数采取s函数,f(x)=1/(1+exp(-x)) neto=neto+wk(j)*a(j); end neto=neto+wk(p+1)*(-1); y(i)=neto; %输出层的激活函数采取线性函数,f(x)=x de=(1/2)*(d(i)-y(i))*(d(i)-y(i)); e=de+e; dwk=q*(d(i)-y(i))*a; for k=1:p dw(k,1:2)=q*(d(i)-y(i))*wk(k)*a(k)*(1-a(k))*x; end wk=wk+dwk; %从隐层到输出层权值的更新 w=w+dw; %从输入层到隐层的权值的更新 end error(epoch)=e; m(epoch)=epoch; if(e<error_goal) break; elseif(epoch==max_epoch) disp('在目前的迭代次数内不能逼近所给函数,请加大迭代次数') end end %simulation for i=1:n %样本个数 x=[xx(i);-1]; neto=0; for j=1:p neti(j)=w(j,1)*x(1)+w(j,2)*x(2); a(j)=1/(1+exp(-neti(j))); neto=neto+wk(j)*a(j); end neto=neto+wk(p+1)*(-1); y(i)=neto; %线性函数 end %plot figure(1) plot(m,error) xlabel('迭代次数') ylabel('均方误差') title('BP算法的学习曲线') figure(2) plot(xx,d) hold on plot(xx,y,'r') legend('蓝线是目标曲线','红线是逼近曲线')
5、保存为BP.m
7、点击运行
8、结果如图
9、学习率与迭代次数分析:
代码中,学习率:
q=0.09;%学习速率
迭代次数:
max_epoch=10000;%最大训练次数
END
相关文章推荐
- matlab实现简单BP神经网络(不使用工具箱),两种求误差方式
- BP神经网络设计的matlab简单实现
- RBF神经网络与BP神经网络与matlab实现
- KNN的matlab简单实现代码
- RBF神经网络的matlab简单实现
- BP神经网络学习及matlab实现
- matlab实现BP神经网络
- 声卡虚拟示波器简单功能-使用matlab DAQ工具箱中API实现
- PCA检测人脸的简单示例_matlab实现
- Spectral Clustering 的简单 Matlab 实现
- 最简单的三层神经网络Matlab实现
- 【模式识别】PCA检测人脸的简单示例MATLAB实现
- 一个简单的实现matlab数组下标操作的类实现
- 用matlab实现一个简单的离群点挖掘(与时序无关)
- bp神经网络及matlab实现
- Spectral Clustering 的简单 Matlab 实现
- PCA检测人脸的简单示例_matlab实现
- PCA检测人脸的简单示例_matlab实现
- 基于Matlab的BP神经网络--源代码与工具箱实现
- bp神经网络及matlab实现