BP神经网络实验报告

合集下载

BP神经网络逼近非线性函数

BP神经网络逼近非线性函数

应用BP 神经网络逼近非线性函一、实验要求1、逼近的非线性函数选取为y=sin(x 1)+cos(x 2) ,其中有两个自变量即x1,x2,一个因变量即y。

2、逼近误差<5% ,即:应用测试数据对网络进行测试时,神经网络的输出与期望值的最大误差的绝对值小于期望值的5% 。

3、学习方法为经典的BP 算法或改进形式的BP 算法,鼓励采用改进形式的BP 算法。

4、不允许采用matlab 中现有的关于神经网络建立、学习、仿真的任何函数及命令。

二、实验基本原理2.1神经网络概述BP 神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传播,误差反向传播。

在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层。

每一层的神经元状态只影响下一层神经元状态。

如果输出层得不到期望输出,则转入反向传播,根据预判误差调整网络权值和阈值,从而使BP 神经网络预测输出不断逼近期望输出。

BP 神经网络的拓扑结构如图所示。

2.2BP 神经网络训练步骤BP 神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。

BP 神经网络的训练过程包括以下几个步骤。

步骤 1 :网络初始化。

根据系统输入输出序列(X,Y) 确定网络输入层节点数n 、隐含层节点数l、输出层节点数m ,初始化输入层、隐含层和输出层神经元之间的连接权值ωij,ωjk ,初始化隐含层阈值a,输出层阈值 b ,给定学习速率和神经元激励函数。

步骤 2 :隐含层输出计算。

根据输入变量X,输入层和隐含层间连接权值ω ij 以及隐含层阈值a,计算隐含层输出H 。

2.3 附加动量法经典 BP 神经网络采用梯度修正法作为权值和阈值的学习算法, 从网络预测误差的负梯 度方向修正权值和阈值, 没有考虑以前经验的积累,学习过程收敛缓慢。

对于这个问题,可 以采用附加动量法来解决,带附加动量的算法学习公式为(k) (k 1) (k) a (k 1) (k 2)式中,ω (k),ω(k-1) ,ω(k-2)分别为 k ,k-1,k-2 时刻的权值; a 为动量学习率,一般取值 为 0.95 。

BP神经网络实验报告

BP神经网络实验报告

BP神经网络实验报告一、引言BP神经网络是一种常见的人工神经网络模型,其基本原理是通过将输入数据通过多层神经元进行加权计算并经过非线性激活函数的作用,输出结果达到预测或分类的目标。

本实验旨在探究BP神经网络的基本原理和应用,以及对其进行实验验证。

二、实验方法1.数据集准备本次实验选取了一个包含1000个样本的分类数据集,每个样本有12个特征。

将数据集进行标准化处理,以提高神经网络的收敛速度和精度。

2.神经网络的搭建3.参数的初始化对神经网络的权重和偏置进行初始化,常用的初始化方法有随机初始化和Xavier初始化。

本实验采用Xavier初始化方法。

4.前向传播将标准化后的数据输入到神经网络中,在神经网络的每一层进行加权计算和激活函数的作用,传递给下一层进行计算。

5.反向传播根据预测结果与实际结果的差异,通过计算损失函数对神经网络的权重和偏置进行调整。

使用梯度下降算法对参数进行优化,减小损失函数的值。

6.模型评估与验证将训练好的模型应用于测试集,计算准确率、精确率、召回率和F1-score等指标进行模型评估。

三、实验结果与分析将数据集按照7:3的比例划分为训练集和测试集,分别进行模型训练和验证。

经过10次训练迭代后,模型在测试集上的准确率稳定在90%以上,证明了BP神经网络在本实验中的有效性和鲁棒性。

通过调整隐藏层结点个数和迭代次数进行模型性能优化实验,可以发现隐藏层结点个数对模型性能的影响较大。

随着隐藏层结点个数的增加,模型在训练集上的拟合效果逐渐提升,但过多的结点数会导致模型的复杂度过高,容易出现过拟合现象。

因此,选择合适的隐藏层结点个数是模型性能优化的关键。

此外,迭代次数对模型性能也有影响。

随着迭代次数的增加,模型在训练集上的拟合效果逐渐提高,但过多的迭代次数也会导致模型过度拟合。

因此,需要选择合适的迭代次数,使模型在训练集上有好的拟合效果的同时,避免过度拟合。

四、实验总结本实验通过搭建BP神经网络模型,对分类数据集进行预测和分类。

实训神经网络实验报告

实训神经网络实验报告

一、实验背景随着人工智能技术的飞速发展,神经网络作为一种强大的机器学习模型,在各个领域得到了广泛应用。

为了更好地理解神经网络的原理和应用,我们进行了一系列的实训实验。

本报告将详细记录实验过程、结果和分析。

二、实验目的1. 理解神经网络的原理和结构。

2. 掌握神经网络的训练和测试方法。

3. 分析不同神经网络模型在特定任务上的性能差异。

三、实验内容1. 实验一:BP神经网络(1)实验目的:掌握BP神经网络的原理和实现方法,并在手写数字识别任务上应用。

(2)实验内容:- 使用Python编程实现BP神经网络。

- 使用MNIST数据集进行手写数字识别。

- 分析不同学习率、隐层神经元个数对网络性能的影响。

(3)实验结果:- 在MNIST数据集上,网络在训练集上的准确率达到98%以上。

- 通过调整学习率和隐层神经元个数,可以进一步提高网络性能。

2. 实验二:卷积神经网络(CNN)(1)实验目的:掌握CNN的原理和实现方法,并在图像分类任务上应用。

(2)实验内容:- 使用Python编程实现CNN。

- 使用CIFAR-10数据集进行图像分类。

- 分析不同卷积核大小、池化层大小对网络性能的影响。

(3)实验结果:- 在CIFAR-10数据集上,网络在训练集上的准确率达到80%以上。

- 通过调整卷积核大小和池化层大小,可以进一步提高网络性能。

3. 实验三:循环神经网络(RNN)(1)实验目的:掌握RNN的原理和实现方法,并在时间序列预测任务上应用。

(2)实验内容:- 使用Python编程实现RNN。

- 使用Stock数据集进行时间序列预测。

- 分析不同隐层神经元个数、学习率对网络性能的影响。

(3)实验结果:- 在Stock数据集上,网络在训练集上的预测准确率达到80%以上。

- 通过调整隐层神经元个数和学习率,可以进一步提高网络性能。

四、实验分析1. BP神经网络:BP神经网络是一种前向传播和反向传播相结合的神经网络,适用于回归和分类问题。

神经网络的BP算法实验报告

神经网络的BP算法实验报告

计算智能基础实验报告实验名称:BP神经网络算法实验班级名称:341521班专业:探测制导与控制技术姓名:***学号:********一、 实验目的1)编程实现BP 神经网络算法;2)探究BP 算法中学习因子算法收敛趋势、收敛速度之间的关系;3)修改训练后BP 神经网络部分连接权值,分析连接权值修改前和修改后对相同测试样本测试结果,理解神经网络分布存储等特点。

二、 实验要求按照下面的要求操作,然后分析不同操作后网络输出结果。

1)可修改学习因子2)可任意指定隐单元层数3)可任意指定输入层、隐含层、输出层的单元数4)可指定最大允许误差ε5)可输入学习样本(增加样本)6)可存储训练后的网络各神经元之间的连接权值矩阵;7)修改训练后的BP 神经网络部分连接权值,分析连接权值修改前和修改后对相同测试样本测试结果 。

三、 实验原理1BP 神经网络算法的基本思想误差逆传播(back propagation, BP)算法是一种计算单个权值变化引起网络性能变化的较为简单的方法。

由于BP 算法过程包含从输出节点开始,反向地向第一隐含层(即最接近输入层的隐含层)传播由总误差引起的权值修正,所以称为“反向传播”。

BP 神经网络是有教师指导训练方式的多层前馈网络,其基本思想是:从网络输入节点输入的样本信号向前传播,经隐含层节点和输出层节点处的非线性函数作用后,从输出节点获得输出。

若在输出节点得不到样本的期望输出,则建立样本的网络输出与其期望输出的误差信号,并将此误差信号沿原连接路径逆向传播,去逐层修改网络的权值和节点处阈值,这种信号正向传播与误差信号逆向传播修改权值和阈值的过程反复进行,直训练样本集的网络输出误差满足一定精度要求为止。

2 BP 神经网络算法步骤和流程BP 神经网络步骤和流程如下:1) 初始化,给各连接权{},{}ij jt W V 及阈值{},{}j t θγ赋予(-1,1)间的随机值;2) 随机选取一学习模式对1212(,),(,,)k k k k k k k n k n A a a a Y y y y ==提供给网络;3) 计算隐含层各单元的输入、输出;1n j ij i j i s w a θ==⋅-∑,()1,2,,j j b f s j p ==4) 计算输出层各单元的输入、输出;1t t jt j t j l V b γ==⋅-∑,()1,2,,t t c f l t q ==5) 计算输出层各单元的一般化误差;()(1)1,2,,k k t t tt t t d y c c c t q =-⋅-=6) 计算中间层各单元的一般化误差;1[](1)1,2,,q kk jt jt j j t e d V b b j p ==⋅⋅-=∑7) 修正中间层至输出层连接权值和输出层各单元阈值;(1)()k jt jt t j V iter V iter d b α+=+⋅⋅(1)()k t t t iter iter d γγα+=+⋅8) 修正输入层至中间层连接权值和中间层各单元阈值;(1)()kk ij ij j i W iter W iter e a β+=+⋅⋅(1)()kj j j iter iter e θθβ+=+⋅9) 随机选取下一个学习模式对提供给网络,返回步骤3),直至全部m 个模式训练完毕;10) 重新从m 个学习模式对中随机选取一个模式对,返回步骤3),直至网络全局误差函数E 小于预先设定的一个极小值,即网络收敛;或者,当训练次数大于预先设定值,强制网络停止学习(网络可能无法收敛)。

神经网络课程报告

神经网络课程报告

神经网络课程认识本学期我们对人工神经网络进行了学习,在学习的过程中,我们对什么是神经网络,神经网络的发展史,神经网络的特点和功能以及神经网络的应用领域等多方面知识都有所了解。

从开始的对人工神经网络的初步了解到最后模型的建立,我们对人工神经网络的认识不断加深。

神经网络作为自动控制及智能控制专业的一个重要分支,掌握一些与其相关的基础知识对今后的学习会有较大的帮助。

具体的人工神经网络中,我们主要学习了单层感知器、标准BP网络、改进型的BP网络、自组织竞争神经网络以及离散型Hopfield网络(即DHNN 网络)。

其中,我们重点学习了标准型BP网络。

在后面的编程训练中,我们也以标准BP网络为模型,设计了一个较为简单的实际型编程问题。

接下来谈谈具体的学习情况:在学习的过程中,我们首先学习了什么是人工神经网络。

这是一个非线性动力学系统,其特色在于信息的分布式存储和并行协同处理。

虽然单个神经元的结构极其简单,功能有限,但大量神经元构成的网络系统所能实现的行为却是极其丰富多彩的。

以数学和物理的方法以及信息处理的角度对人脑神经网络进行抽象,并建立某种简化的模型就是人工神经网络。

人工神经网络远不是人脑生物神经网络的真实写照,而只是对它的简化,抽象与模拟。

揭示人脑的奥妙不仅需要各学科的交叉和各领域专家的协作,还需要测试手段的进一步发展。

目前已经提出了上百种的神经网络模型,这种简化模型能放映出人脑的许多基本特征。

综合人工神经网络的来源,特点及各种解释,可以简单的表述为:人工神经网络是一种旨在模仿人脑结构及其功能的脑式智能信息处理系统。

神经网络的研究可以追溯到19世纪末期,其发展可分为启蒙时期,低潮时期,复兴时期及新时期四个阶段。

人工神经网络是基于对人脑组织结构,活动机制的初步认识提出的一种新型信息处理体系。

人工神经网络具有人脑的一些基本功能,也有其自身的一些特点。

结构特点:信息处理的并行性,信息储存的分布性,信息处理单元的互连性,结构的可塑性。

BP神经网络原理与应用实习论文

BP神经网络原理与应用实习论文

学年论文(本科)学院数学与信息科学学院专业信息与计算科学专业年级10级4班姓名徐玉琳于正平马孝慧李运凤郭双双任培培论文题目BP神经网络原理与应用指导教师冯志敏成绩2013年 9月 24日BP神经网络的原理与应用1.BP神经网络的原理1.1 BP神经网络的结构BP神经网络模型是一个三层网络,它的拓扑结构可被划分为:输入层(InputLayer )、输出层(Outp ut Layer ) ,隐含层(Hide Layer ).其中,输入层与输出层具有更重要的意义,因此也可以为两层网络结构(把隐含层划入输入层,或者把隐含层去掉)每层都有许多简单的能够执行并行运算的神经元组成,这些神经元与生物系统中的那些神经元非常类似,但其并行性并没有生物神经元的并行性高.BP神经网络的特点:1)网络由多层构成,层与层之间全连接,同一层之间的神经元无连接.2)BP网络的传递函数必须可微.因此,感知器的传递函数-——二值函数在这里没有用武之地.BP网络一般使用Sigmoid函数或线性函数作为传递函数.3)采用误差反向传播算法(Back-Propagation Algorithm)进行学习.在BP 网络中,数据从输入层隐含层逐层向后传播,训练网络权值时,则沿着减少误差的方向,从输出层经过中间各层逐层向前修正网络的连接权值.随着学习的不断进行,最终的误差越来越来小.BP神经网络的学习过程BP神经网络的学习算法实际上就是对误差函数求极小值的算法,它采用的算法是最速下降法,使它对多个样本进行反复的学习训练并通过误差的反向传播来修改连接权系数,它是沿着输出误差函数的负梯度方向对其进行改变的,并且到最后使误差函数收敛于该函数的最小点.1.3 BP网络的学习算法BP网络的学习属于有监督学习,需要一组已知目标输出的学习样本集.训练时先使用随机值作为权值,修改权值有不同的规则.标准的BP神经网络沿着误差性能函数梯度的反向修改权值,原理与LMS算法比较类似,属于最速下降法.拟牛顿算法牛顿法是一种基于二阶泰勒级数的快速优化算法.其基本方法是1(1)()()()x k x k A k g k -+=-式中 ()A k ----误差性能函数在当前权值和阀值下的Hessian 矩阵(二阶导数),即2()()()x x k A k F x ==∇牛顿法通常比较梯度法的收敛速度快,但对于前向型神经网络计算Hessian 矩阵是很复杂的,付出的代价也很大.有一类基于牛顿法的算法不需要二阶导数,此类方法称为拟牛顿法(或正切法),在算法中的Hessian 矩阵用其近似值进行修正,修正值被看成梯度的函数. 1)BFGS 算法在公开发表的研究成果中,你牛顿法应用最为成功得有Boryden,Fletcher,Goldfard 和Shanno 修正算法,合称为BFG 算法. 该算法虽然收敛所需的步长通常较少,但在每次迭代过程所需要的计算量和存储空间比变梯度算法都要大,对近似Hessian 矩阵必须进行存储,其大小为n n ⨯,这里n 网络的链接权和阀值的数量.所以对于规模很大的网络用RPROP 算法或任何一种梯度算法可能好些;而对于规模较小的网络则用BFGS 算法可能更有效. 2)OSS 算法 由于BFGS 算法在每次迭代时比变梯度算法需要更多的存储空间和计算量,所以对于正切近似法减少其存储量和计算量是必要的.OSS 算法试图解决变梯度法和拟牛顿(正切)法之间的矛盾,该算法不必存储全部Hessian 矩阵,它假设每一次迭代时与前一次迭代的Hessian 矩阵具有一致性,这样做的一个有点是,在新的搜索方向进行计算时不必计算矩阵的逆.该算法每次迭代所需要的存储量和计算量介于梯度算法和完全拟牛顿算法之间. 最速下降BP 法最速下降BP 算法的BP 神经网络,设k 为迭代次数,则每一层权值和阀值的修正按下式进行(1)()()x k x k g k α+=-式中()x k —第k 次迭代各层之间的连接权向量或阀值向量;()g k =()()E k x k ∂∂—第k 次迭代的神经网络输出误差对各权值或阀值的梯度向量.负号表示梯度的反方向,即梯度的最速下降方向;α—学习效率,在训练时是一常数.在MATLAB 神经网络工具箱中,,可以通过改变训练参数进行设置;()E K —第k 次迭代的网络输出的总误差性能函数,在MATLAB 神经网络工具箱中BP 网络误差性能函数默认值为均方误差MSE,以二层BP 网络为例,只有一个输入样本时,有2()()E K E e k ⎡⎤=⎣⎦21S≈22221()S i i i t a k =⎡⎤-⎣⎦∑ 222212,1()()()()s ii j i i j a k f w k a k b k =⎧⎫⎪⎪⎡⎤=-⎨⎬⎣⎦⎪⎪⎩⎭∑21221112,,11()(()())()s s i j i j i i i j j f w k f iw k p ib k b k ==⎧⎫⎡⎤⎛⎫⎪⎪=++⎢⎥ ⎪⎨⎬⎢⎥⎝⎭⎪⎪⎣⎦⎩⎭∑∑若有n 个输入样本2()()E K E e k ⎡⎤=⎣⎦21nS ≈22221()S ii i ta k =⎡⎤-⎣⎦∑根据公式和各层的传输函数,可以求出第k 次迭代总误差曲面的梯度()g k =()()E k x k ∂∂,分别代入式子便可以逐次修正其权值和阀值,并是总的误差向减小的方向变化,直到达到所需要的误差性能为止. 1.4 BP 算法的改进BP 算法理论具有依据可靠、推导过程严谨、精度较高、通用性较好等优点,但标准BP 算法存在以下缺点:收敛速度缓慢;容易陷入局部极小值;难以确定隐层数和隐层节点个数.在实际应用中,BP 算法很难胜任,因此出现了很多改进算.利用动量法改进BP 算法标准BP 算法实质上是一种简单的最速下降静态寻优方法,在修正W(K)时,只按照第K 步的负梯度方向进行修正,而没有考虑到以前积累的经验,即以前时刻的梯度方向,从而常常使学习过程发生振荡,收敛缓慢.动量法权值调整算法的具体做法是:将上一次权值调整量的一部分迭加到按本次误差计算所得的权值调整量上,作为本次的实际权值调整量,即:其中:α为动量系数,通常0<α<0.9;η—学习率,范围在0.001~10之间.这种方法所加的动量因子实际上相当于阻尼项,它减小了学习过程中的振荡趋势,从而改善了收敛性.动量法降低了网络对于误差曲面局部细节的敏感性,有效的抑制了网络陷入局部极小.自适应调整学习速率标准BP算法收敛速度缓慢的一个重要原因是学习率选择不当,学习率选得太小,收敛太慢;学习率选得太大,则有可能修正过头,导致振荡甚至发散.可采用图所示的自适应方法调整学习率.调整的基本指导思想是:在学习收敛的情况下,增大η,以缩短学习时间;当η偏大致使不能收敛时,要及时减小η,直到收敛为止.动量-自适应学习速率调整算法采用动量法时,BP算法可以找到更优的解;采用自适应学习速率法时,BP算法可以缩短训练时间.将以上两种方法结合起来,就得到动量-自适应学习速率调整算法.1. L-M学习规则L-M(Levenberg-Marquardt)算法比前述几种使用梯度下降法的BP算法要快得多,但对于复杂问题,这种方法需要相当大的存储空间L-M(Levenberg-Marquardt)优化方法的权值调整率选为:其中:e —误差向量;J —网络误差对权值导数的雅可比(Jacobian )矩阵;μ—标量,当μ很大时上式接近于梯度法,当μ很小时上式变成了Gauss-Newton 法,在这种方法中,μ也是自适应调整的. 1.5 BP 神经网络的设计 网络的层数输入层节点数取决于输入向量的维数.应用神经网络解决实际问题时,首先应从问题中提炼出一个抽象模型,形成输入空间和输出空间.因此,数据的表达方式会影响输入向量的维数大小.例如,如果输入的是64*64的图像,则输入的向量应为图像中所有的像素形成的4096维向量.如果待解决的问题是二元函数拟合,则输入向量应为二维向量.理论上已证明:具有偏差和至少一个S 型隐含层加上一个线性输出层的网络,能够逼近任何有理数.增加层数可以更进一步的降低误差,提高精度,但同时也使网络复杂化,从而增加了网络权值的训练时间.而误差精度的提高实际上也可以通过增加神经元数目来获得,其训练效果也比增加层数更容易观察和调整.所以一般情况下,应优先考虑增加隐含层中的神经元数. 隐含层的神经元数网络训练精度的提高,可以通过采用一个隐含层,而增加神经元数了的方法来获得.这在结构实现上,要比增加隐含层数要简单得多.那么究竟选取多少隐含层节点才合适?这在理论上并没有一个明确的规定.在具体设计时,比较实际的做法是通过对不同神经元数进行训练对比,然后适当地加上一点余量.1)0niMi C k =>∑,k 为样本数,M 为隐含层神经元个数,n 为输入层神经元个数.如i>M,规定C i M =0.2)和n 分别是输出层和输入层的神经元数,a 是[0.10]之间的常量.3)M=2log n ,n 为输入层神经元个数.初始权值的选取由于系统是非线性的,初始值对于学习是否达到局部最小、是否能够收敛及训练时间的长短关系很大.如果初始值太大,使得加权后的输入和n落在了S型激活函数的饱和区,从而导致其导数f (n)非常小,从而使得调节过程几乎停顿下来.所以一般总是希望经过初始加权后的每个神经元的输出值都接近于零,这样可以保证每个神经元的权值都能够在它们的S型激活函数变化最大之处进行调节.所以,一般取初始权值在(-1,1)之间的随机数.学习速率学习速率决定每一次循环训练中所产生的权值变化量.大的学习速率可能导致系统的不稳定;但小的学习速率导致较长的训练时间,可能收敛很慢,不过能保证网络的误差值不跳出误差表面的低谷而最终趋于最小误差值.所以在一般情况下,倾向于选取较小的学习速率以保证系统的稳定性.学习速率的选取范围在0.01-0.8之间.1.6BP神经网络局限性需要参数多且参数选择没有有效的方法对于一些复杂问题 ,BP 算法可能要进行几小时甚至更长的时间训练,这主要是由于学习速率太小所造成的.标准BP 网络学习过程缓慢,易出现平台,这与学习参数率l r的选取有很大关系.当l r较时,权值修改量大,学习速率也快,但可能产生振荡;当l r较小时,虽然学习比较平稳,但速度十分缓慢.容易陷入局部最优BP网络易陷入局部最小, 使 BP网络不能以高精度逼近实际系统.目前对于这一问题的解决有加入动量项以及其它一些方法.BP 算法本质上是以误差平方和为目标函数 , 用梯度法求其最小值的算法.于是除非误差平方和函数是正定的, 否则必然产生局部极小点, 当局部极小点产生时 , BP算法所求的就不是解.1.6.3 样本依赖性这主要表现在网络出现的麻痹现象上.在网络的训练过程中,如其权值调的过大,可能使得所有的或大部分神经元的加权值偏大,这使得激活函数的输入工作在S型转移函数的饱和区,从而导致其导函数非常小,使得对网络权值的调节过程几乎停顿下来.通常为避免这种现象的发生,一是选取较小的初始权值,二是采用较小的学习速率,但又要增加时间训练.初始权敏感对于一些复杂的问题,BP算法可能要进行几个小时甚至更长时间的训练.这主要是由于学习速率太小造成的.可采用变化的学习速率或自适应的学习速率来加以改进.2.BP神经网络应用2.1 手算实现二值逻辑—异或这个例子中,采用手算实现基于BP网络的异或逻辑.训练时采用批量训练的方法,训练算法使用带动量因子的最速下降法.在MATLAB中新建脚本文件main_xor.m,输入代码如下:%脚本%批量训练方式.BP网络实现异或逻辑%%清理clear allclcrand('seed',2)eb = 0.01; %误差容限eta = 0.6; %学习率mc = 0.8; %动量因子maxiter = 1000; %最大迭代次数%% 初始化网络nSampNum = 4;nSampDim = 2;nHidden = 3;nOut = 1;w = 2*(rand(nHidden,nSampDim)-1/2);b = 2*(rand(nHidden,1)-1/2);wex = [w,b];W = 2*(rand(nOut,nHidden)-1/2);B = 2*(rand(nOut,1)-1/2);WEX = [W,B];%%数据SampIn=[0,0,1,1;...0,1,0,1;…1,1,1,1];expected = [0,1,1,0];%%训练iteration = 0;errRec = [];outRec =[];for i = 1:maxiter% 工作信号正向传播hp = wex*SampIn;tau = logsig(hp);tauex = [tau',1*ones(nSampNum,1)]';HM = WEX*tauex;out = logsig(HM);outRec = [outRec,out'];err = expected - out;sse = sumsqr(err);errRec = [errRec,sse];fprintf('第%d 次迭代,误差:%f \n',i,sse);% 判断是否收敛iteration = iteration + 1;if sse <= ebbreak;end% 误差信号反向传播% DELTA 和delta 为局部梯度DELTA = err.*dlogsig(HM,out);delta = W' * DELTA.*dlogsig(hp,tau);dWEX = DELTA*tauex';dwex = delta*SampIn';% 更新权值if i == 1WEX = WEX + eta*dWEX;wex = wex + eta*dwex;elseWEX = WEX + (1-mc)*eta*dWEX + mc*dWEXold;wex = wex + (1-mc)*eta*dwex+mc*dwexold;enddWEXold = dWEX;dwexold = dwex;W = WEX(:,1:nHidden);end%%显示figure(1)grid[nRow,nCol]=size(errRec);semilogy(1:nCol,errRec,'LineWidth',1.5);title('误差曲线');xlabel('迭代次数');x=-0.2:.05:1.2;[xx,yy] = meshgrid(x);for i=1:length(xx)for j=1:length(yy)xi=[xx(i,j),yy(i,j),1];hp = wex*xi';tau = logsig(hp);tauex = [tau',1]';HM = WEX*tauex;out = logsig(HM);z (i,j) =out;endendfigure(2)mesh(x,x,z);figure(3)plot([0,1],[0,1],'*','LineWidth',2);hold onplot([0,1],[1,0],'O','LineWidth',2);[c,h]=contour(x,x,z,0.5,'b');clabel(c,h);legend('0','1','分类面');title('分类面')2.2 误差下降曲线如下图所示:Finger 1010*******400500600700800900100010-210-110误差曲线迭代次数网格上的点在BP 网络映射下的输出如下图:Finger 2异或本质上是一个分类问题,,分类面如图:Finger 3分类面-0.200.20.40.60.81 1.2本文介绍了神经网络的研究背景和现状,分析了目前神经网络研究中存在的问题.然后描述了BP神经网络算法的实现以及BP神经网络的工作原理,给出了BP网络的局限性.本文虽然总结分析了BP神经网络算法的实现,给出了实例分析,但是还有很多的不足.所总结的BP神经网络和目前研究的现状都还不够全面,经过程序调试的图形有可能都还存在很多细节上的问题,而图形曲线所实现效果都还不够好,以及结果分析不够全面、正确、缺乏科学性等,这些都还是需加强提高的.近几年的不断发展,神经网络更是取得了非常广泛的应用,和令人瞩目的发展.在很多方面都发挥了其独特的作用,特别是在人工智能、自动控制、计算机科学、信息处理、机器人、模式识别等众多方面的应用实例,给人们带来了很多应用上到思考,和解决方法的研究.但是神经网络的研究最近几年还没有达到非常热门的阶段,这还需有很多热爱神经网络和研究神经网络人员的不断研究和创新,在科技高度发达的现在,我们有理由期待,也有理由相信.我想在不久的将来神经网络会应用到更多更广的方面,人们的生活会更加便捷.学年论文成绩评定表。

基于BP神经网络的手写数字识别实验报告

基于BP神经网络的手写数字识别实验报告

基于BP神经网络的手写数字识别实验报告基于BP神经网络的手写体数字图像识别PT1700105 宁崇宇PT1700106 陈玉磊PT1700104 安传旭摘要在信息化飞速发展的时代,光学字符识别是一个重要的信息录入与信息转化的手段,其中手写体数字的识别有着广泛地应用,如:邮政编码、统计报表、银行票据等等,因其广泛地应用范围,能带来巨大的经济与社会效益。

本文结合深度学习理论,利用BP神经网络对手写体数字数据集MNIST进行分析,作为机器学习课程的一次实践,熟悉了目前广泛使用的Matlab工具,深入理解了神经网络的训练过程,作为非计算机专业的学生,结合该课题掌握了用神经网络处理实际问题的方法,为今后将深度学习与自身领域相结合打下了基础。

1 引言从计算机发明之初,人们就希望它能够帮助甚至代替人类完成重复性劳作。

利用巨大的存储空间和超高的运算速度,计算机已经可以非常轻易地完成一些对于人类非常困难的工作,然而,一些人类通过直觉可以很快解决的问题,却很难通过计算机解决,这些问题包括自然语言处理、图像识别、语音识别等等,它们就是人工智能需要解决的问题。

计算机要想人类一样完成更多的智能工作,就需要掌握关于这个世界的海量知识,很多早期的人工智能系统只能成功应用于相对特定的环境,在这些特定环境下,计算机需要了解的知识很容易被严格完整地定义。

为了使计算机更多地掌握开放环境下的知识,研究人员进行了很多的尝试。

其中影响力很大的一个领域就是知识图库(Ontology),WordNet是在开放环境中建立的一个较大且有影响力的知识图库,也有不少研究人员尝试将Wikipedia中的知识整理成知识图库,但是建立知识图库一方面需要花费大量的人力和物力,另一方面知识图库方式明确定义的知识有限,不是所有的知识都可以明确地定义成计算机可以理解的固定格式。

很大一部分无法明确定义的知识,就是人类的经验,如何让计算机跟人类一样从历史的经验中获取新的知识,这就是机器学习需要解决的问题。

实验报告-人工神经网络--基于人工神经网络实现材料设计优化与建模

实验报告-人工神经网络--基于人工神经网络实现材料设计优化与建模

实验课程名称:计算机在材料科学与工程中的应用2)用MATLAB中的人工神经网络方法对材料组成与性能数据进行分析和建模。

题目1:设计一个BP人工神经网络,使其与非线性函数1+sin(k*pi/4*p)逼近,其中k为函数频率系数,p为时间坐标向量,取p=[-1:0.05:8]。

要求:A)当频率系数k=1时,分析设计bp神经网络结构,包括网络的层数、的个数、传递函数。

B)进行bp神经网络的编程,构建网络、训练网络和仿真,绘制神经网络输出的逼近曲线图。

计算机实现过程:① 初始化:对所有连接权和阈值赋以随机任意小值;)0;,...,1;,...,1;,...,2()()(1====-t p j p i m k t t w k k k i k ij ,,θ② 从N 组输入输出样本中取一组样本:x (1)=[x1,…, xp1]T, d (1) =[d1,…,dpm ]T, 把输入信息 x (1) =[x1,…, xp1]T 输入BP 网络中 ③ 正向传播:计算各层节点的输出),...,1,...,2(k ki p i m k y ==;分析:产生副作用,训练后网络输出结果拟合精度不够。

分析:训练曲线达不到,由于初始值不定,误差进入梯度误差局部最小曲面。

分析:训练曲线达到要求分析:训练曲线未达到目标,需要调整神经网络结构参数分析:达到目标,且连续运行多次,均达到要求,此神经元数目达到要求分析:当神经元数目过大,达到过拟合,对训练以外的数据精确度不够,泛化能力减弱当频率一定且其他参数条件不变时,隐含层神经元数增大时,得到的曲线与原始的非线性函数曲线更加接近,说明BP网络对非线性函数的逼近效果比较好。

将数据转置,随机选择5组数据为预测样本数据,其他图:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深圳大学实验报告实验课程名称:人工神经网络技术实验项目名称:BP神经网络对蝴蝶花分类学院:专业:软件工程报告人:学号:班级:同组人:无指导教师:实验时间:实验报告提交时间:教务处制一、实验目的初步熟悉MATLAB 工作环境,熟悉命令窗口,学会使用帮助窗口查找帮助信息。

二、实验内容1、网络设计,包括输入层、隐含层、输出层节点个数的设计。

2、算法步骤3、编程,注意原始数据的通用化,数据输入的随机性。

4、网络训练,注意训练数据与验证数据分开。

5、网络验证6、结果分析,修改隐含层节点个数,修改学习率,分别对结果的影响。

三、实验步骤直接在Matlab软件中的Editor中运行以下代码:(完善的代码用红色字体表示)% li.m% A BP NN with momentum to solve Fisher's Iris Flower problem% by lixiujuan, Nov 13, 2011%% the NN architecture% it is a three layers neural network 4-3-3.%% parameter description% h=4 the node numer of input layer% i=3 the node numer of hidden layer% j=3 the node numer of output layer% V[h,i] the weights between input and hidden layers% W[i,j] the weights between hidden and output layers% Pi[i] the thresholds of hidden layer nodes% Tau[j] the thresholds of output layer nodes% a[h] the input values% b[i] the hidden layer node activations% c[j] the output layer node activations% ck[j] the desired output of output layer nodes% d[j] the eror in output layer nodes% e[i] the eror in hidden layer nodes% DeltaW[i,j] the amount of change for the weights W[i,j]% DeltaV[h,i] the amount of change for the weights V[h,i]% DeltaPi[i] the amount of change for the thresholds Pi[i]% DeltaTau[j] the amount of change for the thresholds Tau[j]% Alpha=0.1 the leaning rate% Beta=0.1 the leaning rate% Gamma=0.8 the constant determines effect of past weight changes% Tor=0.001 the torrelance that determines when to stop training% Maxepoch=1000 the max iterate number%% other parameters% Ntrain=115 the number of trainning sets% Ntest=35 the number of test sets% Otrain[115] the output of training sets% Otest[35] the output of test sets% Odesired[150] the desired output of training and test sets%% function description% f(x)=logsig(x)% f(x)=1/(1+exp(-x))%% data file% input file: data.dat%close all; clc; clf; clear all;% parameters for the NN structureh=4;i=3;j=3;Alpha=0.1;Beta=0.1;Gamma=0.85;Tor=0.0005;Maxepoch=2000;Accuracy=0;Ntrain=115;Ntest=35;%assign random values in the range [-1, +1]V=2*(rand(h,i)-0.5);W=2*(rand(i,j)-0.5);Pi=2*(rand(1,i)-0.5);Tau=2*(rand(1,j)-0.5);DeltaWOld(i,j)=0; %set the delat of Wij to 0DeltaVOld(h,i)=0; %set the delat of Vij to 0DeltaPiOld(i)=0; %set the delat of Pi to 0DeltaTauOld(j)=0; %set the delat of Tau to 0% the learning processEpoch=1;Error=10;% load the training set data and test set dataload data.datOdesired=data(:,2); % get the desired of output of 150 data sets % normalize the input data to rang [-1 +1]datanew=data(:,3:6);maxv=max(max(datanew));minv=min(min(datanew));datanorm=2*((datanew-minv)/(maxv-minv)-0.5);while Error>TorErr(Epoch)=0;for k=1:Ntrain % k = the index of tranning seta=datanorm(k,:); % get the input% set the desired output ck[j]if data(k,2)==0ck=[1 0 0];elseif data(k,2)==1ck=[0 1 0];elseck=[0 0 1];end;% calculate the hidden nodes activationfor ki=1:ib(ki)=logsig(a*V(:,ki)+Pi(ki));end;% calculate the output nodes activationfor kj=1:jc(kj)=logsig(b*W(:,kj)+Tau(kj));end;% calculate error in output Layer FCd=c.*(1-c).*(ck-c);% calculate error in hidden layer FBe=b.*(1-b).*(d*W');% adjust weights Wij between FB and FCfor ki=1:ifor kj=1:jDeltaW(ki,kj)=Alpha*b(ki)*d(kj)+Gamma*DeltaWOld(ki,kj); endend;W=W+DeltaW;DeltaWOld=DeltaW;% adjust weights Vij between FA and FBfor kh=1:hfor ki=1:iDeltaV(kh,ki)=Beta*a(kh)*e(ki);endend;V=V+DeltaV;DeltaVold=DeltaV;% adjust thresholds Pi and TauDeltaPi=Beta*e+Gamma*DeltaPiOld;Pi=Pi+DeltaPi;DeltaPiold=DeltaPi;DeltaTau=Alpha*d+Gamma*DeltaTauOld;Tau=Tau+DeltaTau;DeltaTauold=DeltaTau;% the error is the max of d(1),d(2),d(3)Err(Epoch)=Err(Epoch)+0.5*(d(1)*d(1)+d(2)*d(2)+d(3)*d(3)); end %for k=1:NtrainErr(Epoch)=Err(Epoch)/Ntrain;Error=Err(Epoch);% the training stops when iterate is too muchif Epoch > Maxepochbreak;endEpoch = Epoch +1; % update the iterate numberend% test datafor k=1:Ntest % k = the index of test seta=datanorm(Ntrain+k,:); % get the input of test sets% calculate the hidden nodes activationfor ki=1:ib(ki)=logsig(a*V(:,ki)+Pi(ki));end;% calculate the output of test setsfor kj=1:jc(kj)=logsig(b*W(:,kj)+Tau(kj));end;% transfer the output to one field formatif (c(1)> 0.9)Otest(k)=0;elseif (c(2)> 0.9)Otest(k)=1;elseif (c(3)> 0.9)Otest(k)=2;elseOtest(k)=3;end;% calculate the accuracy of test setsif Otest(k)==Odesired(Ntrain+k)Accuracy=Accuracy+1;end;end; % k=1:Ntest% plot the errorplot(Err);% plot the NN output and desired output during testN=1:Ntest;figure; plot(N,Otest,'b-',N,Odesired(116:150),'r-');% display the accuracyAccuracy = 100*Accuracy/Ntest;t=['TESTING RESULT, the accuracy of test sets is: ' num2str(Accuracy) '%' ]; disp(t);当中间隐藏层结点数为i=3时,得出下图:当Alpha=0.08;Beta=0.08时;如下图:当Alpha=0.2;Beta=0.2时;如下图:当Alpha=0.2;Beta=0.3时;如下图:当中间隐藏层结点数为i=4时,得出下图:当中间隐藏层结点数为i=2时,得出下图:当Alpha=0.05;Beta=0.05时;如下图:当中间隐藏层结点数为i=1时,得出下图:四、总结分析由于对MATLAB的不熟悉,一开始还是不知道怎么完成这个实验,但是在同学的帮助下,渐渐懂得怎么导入数据和代码实现,进而了解怎么样使用BP神经网络来进行蝴蝶花的分类。

相关文档
最新文档