计算智能与智能系统课程实验2:神经网络数值实验
- 格式:doc
- 大小:404.06 KB
- 文档页数:8
江苏科技大学计算智能实验计算机科学与工程学院实验一手写数字识别的神经网络算法设计与实现一、实验目的通过学习BP神经网络技术,对手写数字进行识别,基于结构的识别法及模板匹配法来提高识别率。
二、实验器材PC机 matlab软件三、实验内容按照BP神经网络设计方法选用两层BP网络,构造训练样本集,并构成训练所需的输入矢量和目标向量,通过画图工具,获得数字原始图像,截取图像像素为0的最大矩形区域,经过集合变换,变成16*16的二值图像,再进行反色处理,其图像数据特征提取为神经网络的输入向量。
通过实验证实,BP神经网络应用于手写数字识别具有较高的识别率和可靠性。
四、实验原理BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成. 正向传播时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元. 若在输出层得不到期望的输出,则转向误差信号的反向传播流程. 通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程.五、实验步骤1、首先对手写数字图像进行预处理,包括二值化、去噪、倾斜校正、归一化和特征提取,生成BP神经网络的输入向量m和目标向量target. 其中m选取40×10的矩阵,第1列到第10列代表0~9的数字.target为9×10的单位矩阵,每个数字在其所排顺序位置输出1,其他位置输出0.2、然后神经网络的训练过程是识别字符的基础,直接关系到识别率的高低。
输送训练样本至BP神经网络训练, 在梯度方向上反复调整权值使网络平方和误差最小。
学习方法采用最速下降方法,输入结点数为16*16=256,隐层传输函数为sigmoid函数(logsig),一个输出结点,输出传输函数为pureline(purelin),隐层结点数为sqrt(256+1)+a(a=1~10),取为25。
神经网络实验报告神经网络实验报告引言:神经网络是一种模仿人脑神经元网络结构和功能的计算模型,它通过学习和训练来实现模式识别、分类和预测等任务。
本次实验旨在探索神经网络的基本原理和应用,并通过实践验证其效果。
一、神经网络的基本原理1.1 神经元模型神经元是神经网络的基本单元,它接收来自其他神经元的输入信号,并通过激活函数进行处理后输出。
我们采用的是Sigmoid函数作为激活函数,它能够将输入信号映射到0到1之间的值。
1.2 神经网络结构神经网络由输入层、隐藏层和输出层组成。
输入层接收外部输入的数据,隐藏层用于处理和提取特征,输出层给出最终的预测结果。
隐藏层的数量和每层神经元的数量是根据具体问题而定的。
1.3 反向传播算法反向传播算法是神经网络中最常用的训练算法,它通过计算误差和调整权重来不断优化网络的预测能力。
具体而言,它首先进行前向传播计算得到预测结果,然后计算误差,并通过链式法则将误差反向传播到每个神经元,最后根据误差调整权重。
二、实验设计2.1 数据集选择本次实验选择了一个手写数字识别的数据集,其中包含了大量的手写数字图片和对应的标签。
这个数据集是一个经典的机器学习数据集,可以用来评估神经网络的分类能力。
2.2 神经网络参数设置为了探究神经网络的性能和泛化能力,我们设置了不同的参数组合进行实验。
主要包括隐藏层数量、每层神经元数量、学习率和训练轮数等。
2.3 实验步骤首先,我们将数据集进行预处理,包括数据归一化和标签编码等。
然后,将数据集划分为训练集和测试集,用于训练和评估网络的性能。
接下来,根据不同的参数组合构建神经网络,并使用反向传播算法进行训练。
最后,通过测试集评估网络的分类准确率和损失函数值。
三、实验结果与分析3.1 参数优化我们通过对不同参数组合的实验进行比较,找到了在手写数字识别任务上表现最好的参数组合。
具体而言,我们发现增加隐藏层数量和神经元数量可以提高网络的分类准确率,但同时也会增加训练时间。
神经网络的原理和应用实验报告一、引言神经网络是一种模拟人脑神经元之间相互连接和通信的计算模型。
神经网络的原理是基于人脑神经系统的工作方式,通过模拟大量的神经元之间的连接与传递信息,实现了模式识别、分类、回归等任务。
本实验报告将介绍神经网络的原理和应用,以及我们在实验中的具体操作和实验结果。
二、神经网络的原理神经网络是由多个神经元组成的网络,每个神经元都有多个输入和一个输出。
神经元的输入通过加权和的方式传递给激活函数,激活函数决定了神经元的输出。
神经网络通过不断调整神经元之间的连接权重,来学习和适应不同的任务和数据,实现模式识别和分类等功能。
神经网络的训练过程可以分为前向传播和反向传播两个阶段。
前向传播是指输入数据通过神经网络,逐层计算输出结果的过程。
反向传播是指根据网络输出和实际标签之间的误差,以梯度下降的方式调整神经网络中神经元之间的连接权重,从而不断改进网络的预测性能。
三、神经网络的应用神经网络具有广泛的应用领域,包括计算机视觉、自然语言处理、模式识别等。
以下列举了神经网络在各领域的应用:1.计算机视觉:–图像分类:神经网络可以学习识别图像中的不同物体,广泛应用于图像分类任务。
–目标检测:神经网络可以通过边界框和置信度信息,实现对图像中特定目标的检测和定位。
–图像生成:神经网络可以生成具有逼真性的图像,如GAN (生成对抗网络)。
2.自然语言处理:–文本分类:神经网络可以根据输入文本的特征,将其分类到不同的类别。
–机器翻译:神经网络可以将一种语言的文本翻译为另一种语言的文本。
–文本生成:神经网络可以生成与给定输入文本相似的新文本。
3.模式识别:–人脸识别:神经网络可以学习并识别人脸的特征,用于人脸识别和认证。
–声音识别:神经网络可以学习并识别不同声音的特征,用于语音识别和指令识别。
四、实验操作我们在实验中使用了一个包含两个隐藏层的神经网络,用于手写数字的分类任务。
首先,我们将每个手写数字的图像转化为一维的向量作为输入。
一、实验背景随着人工智能技术的飞速发展,神经网络作为一种强大的机器学习模型,在各个领域得到了广泛应用。
为了更好地理解神经网络的原理和应用,我们进行了一系列的实训实验。
本报告将详细记录实验过程、结果和分析。
二、实验目的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网络的多层感知器一实验目的:1.理解基于BP网络的多层感知器的工作原理2.通过调节算法参数的了解参数的变化对BP多层感知器训练的影响3.了解BP多层感知器的局限性二实验内容:1.根据实验内容推导出输出的计算公式以及误差的计算公式2.使用Matlab编程实现BP多层感知器3.调节学习率η及隐结点的个数,观察对于不同的学习率、不同的隐结点个数时算法的收敛速度4.改用批处理的方法实验权值的收敛,并加入动量项来观察批处理以及改进的的算法对结果和收敛速度的影响。
三.实验原理以及过程的推导1. 基本BP 算法的多层感知器模型下面所示是一个单输入单输出的BP多层感知器的模型,它含有一个隐层。
输出O输出层X0 X下面对误差和权值的调整过程进行推导对于单样本的输入X i则隐层的输出:y i=f1(net j);net j=(x i*v i)输出层的输出:O=f2(net);net=(w i*y i)变换函数:1f1=xe-1+f2=x;当网络输出与期望输出不等时,存在输出误差E1(d-o)2;E=2计算各层的误差:把误差分配到各层以调整各层的权值,所以,各层权值的调整量等于误差E对各权值的负偏导与学习率的乘积,计算得到对权值W 和权值V 的调整量如下: 将上面的式子展开到隐层得: E=21(d-o)2=21[d- f 2(net)]=21[d-f 2( iji i iy w ∑==1)]将上式展开到输入层得: E=21(d-o)2=21[d- f 2(net)]=21[d-f 2( ij i i i w∑==1f 1(i ji i i x v ∑==1))]调整权值的原则是使误差不断地减小,因此应使权值的调整量与误差的梯度下降成正比,即Δw j =-jW E ∂ηΔv j =-jVE∂η计算得到对各权值的调整为:Δw j =η*(d(1,p)-o(1,p))*y(1,i)Δv j = *(d(1,p)-o(1,p))*w(1,i)*y(1,i)*(1-y(1,i))*x(1,p)其中P 为第P 个样本:四 实验步骤Step 1 初始化对权值矩阵W 、V 赋随机数,将样本模式计数器p 和训练次数计数器q 置于1,误差E 置0,学习率η设为0~1 内的小数,网络训练后的精度Emin 设为一个正的小数;Step 2 输入训练样本对,计算各层输出用当前样本X p 、d p 对向量数组X 、d 赋值,用下式计算Y 和O 中各分量 y i =f 1(net j );net j=(x i*v i)O=f2(net j);net=(w i*y i)Step 3 计算网络输出误差设共有P 对训练样本,网络对于不同的样本具有不同的误差2Step 4 计算各层误差信号:各层的误差信号为误差E对各层权值的偏导Step 5 调整各层权值Δw=η*(d(1,p)-o(1,p))*y(1,i)Δv=*(d(1,p)-o(1,p))*w(1,i)*y(1,i)*(1-y(1,i))*x(1,p)Step 6 检查是否对所有样本完成一次轮训若p<P,计算器p=p+1,q=q+1,返回Step 2, 否则转到Step 7Step 7 检查网络总误差是否达到精度要求当用E RME作为网络的总误差时,若满足E RME<E min,训练结束,否则E 置0,p 置1,返回Step 2。
基于神经网络的数字识别系统一、实验目的通过对本系统的学习开发,对计算机人工智能和神经网络有一定的认识,了解人工智能和网络神经学习的基本方法和思路。
构建BP网络实例,熟悉前馈网络的原理及结构。
二、实验原理反向传播网络(Back propagation Network,简称BP网络)是对非线形可微分函数进行权值训练的多层前向网络。
BP网络可以看作是对多层感知器网络的扩展,即信息的正向传播及误差数据的反向传递。
BP网络主要可以应用于模式分类、函数逼近以及数据压缩等等。
这里使用了一种较为简单的BP网络模型,并将其应用于一个实例:数字0到9的识别。
反向传播(BP)算法是一种计算单个权值变化引起网络性能变化值的较为简单的方法。
BP算法过程从输出节点开始,反向地向第一隐含层(即最接近输入层的隐含层)传播由总误差引起的权值修正。
BP网络不仅含有输入节点和输出节点,而且含有一层或多层隐(层)节点。
输入信号先向前传递到隐节点,经过作用后,再把隐节点的输出信息传递到输出节点,最后给出输出结果。
网络拓扑结构三、实验条件1.执行环境在装有Visual C++ 6.0运行库的Windows XP系统上运行。
2.编译环境Microsoft Visual C++ 6.0 。
3.运行方式该程序的可执行文件名为:LwNumRec.exe双击运行进入操作界面:然后进入具体的操作:(1)训练网格首先,打开图像(256色):其次输入归一化宽度与高度:再次对Bp网络参数进行设置:最后进行训练,并输出训练结果:(2)进行识别首先,打开图像(256色);其次输入归一化宽度与高度;再次,进行归一化处理,点击“一次性处理”(相当于手动逐步执行步骤1~8);处理后结果:最后,点击“识”或者使用菜单找到相应项来进行识别。
识别的结果为:1.通过BP网络各项参数的不同设置,观察BP算法的学习效果。
2.观察比较BP网络拓扑结构及其它各项参数变化对于训练结果的影响。
神经网络实验报告一.实验目的(1)熟悉Matlab/Simulink的使用.(2)掌握BP神经网络的基本原理和基本的设计步骤.(3)了解BP神经网络在实际中的应用.(4)针对简单的实际系统, 能够建立BP神经网络控制模型.二、实验内容BP神经网络神经网络的概念、原理和设计是受生物、特别是人脑神经系统的启发提出的. 神经网络由大量简单的处理单元来模拟真实人脑神经网络的机构和功能以及若干基本特性,是一个高度复杂的非线性自适应动态处理系统.BP网络是1986年由Rinehart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一. BP网络能学习和存贮大量的输入- 输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程. 它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小. BP神经网络模型拓扑结构包括输入( input) 、隐层( hide layer)和输出层(output layer) ,如图1所示.三、基于BP神经网络的手写数字识别3.1 输入向量与目标向量首先对手写数字图像进行预处理,包括二值化、去噪、倾斜校正、归一化和特征提取,生成BP神经网络的输入向量Alphabet和目标向量Tar2get. 其中Alphabet选取40 ×10的矩阵,第1列到第10列代表0~9的数字. Target为10 ×10的单位矩阵,每个数字在其所排顺序位置输出1,其他位置输出0.3. 2 BP神经网络的构建BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成. 正向传播时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元. 若在输出层得不到期望的输出,则转向误差信号的反向传播流程. 通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程.首先考虑正向传播,设输入层有n个节点,隐层有p个节点,输出层有q个节点. 输入层与隐层之间的权值为vk i, 隐层与输出层之间的权值为w jk. 隐层的传递函数为f1 ( x) ,输出层的传递函数为f2 ( x) ,则隐层节点的输出为输出层节点的输出为通过式(1) 和(2) 可得BP神经网络完成n维到q维的映射. 其次考虑反向传播. 在反向传播中,需要对不理想的权值进行调整, B P神经网络的核心要务即在于调权. 定义误差函数, 设输入P个学习样本,用x1 , x2 , ⋯, xp 来表示. 第p个样本输入网络得到输出ypj ( j = 1, 2, ⋯, q) ,其误差为式中为期望输出. P个样本的全局误差为将式(3) 代入得输出层权值的变化采用累计误差BP算法调整wjk 使全局误差E变小,即式(5) 中η为学习率. 现定义误差信号为将式(3) 代入可得第一项为第二项为输出层传递函数f2 ( x) 的偏微分将式(7) 和(8) 代入可得误差信号为则输出层各神经元权值△wjk 调整公式将式(9)代入可定义为在得到输出层权值调整公式后, 需要定义隐层权值△vk i 调整公式根据输出层各神经元权值△wjk 调整公式推导过程,可得△vk i 为3. 3 网络的训练神经网络的训练过程是识别字符的基础, 十分重要,直接关系到识别率的高低. 输送训练样本至B P神经网络训练, 在梯度方向上反复调整权值使网络平方和误差最小. 为使网络对输入向量有一定鲁棒性,可先用无噪声的样本对网络进行训练,直到其平方和误差最小,再用含噪声的样本进行训练,保证网络对噪声不敏感. 训练完毕, 把待识别数字送BP神经网络中进行仿真测试.三、实验结果与分析权值初始化为( - 1, 1) 之间的随机数, 期望误差为0. 01, 最大训练步数5000, 动量因子为0.95,隐层和输出层均采用“logsig”函数, 手写数字的识别结果如图2 ( a) ~( e) 所示,以数字4为例给出处理过程对1000个手写数字(每个数字取100幅不同的图像) 进行识别,其识别结果如表1所示.四、结论针对传统的手写数字识别中识别率和可靠性不高的情况, 提出了将B P神经网络应用于数字识别,并通过实验,证实B P神经网络算法识别率较高,具备可行性.。
神经网络实验报告一、实验目的通过在matlab 下面编程实现bp 网络逼近标准正弦函数,来加深对BP 网络的了解和认识,理解信号的正向传播和误差的反向传递过程。
二、实验原理由于传统的感知器和线性神经网络有自身无法克服的缺陷,它们都不能解决线性不可分问题,因此在实际应用过程中受到了限制。
而BP 网络却拥有良好的繁泛化能力、容错能力以及非线性映射能力。
因此成为应用最为广泛的一种神经网络。
BP 算法的基本思想是把学习过程分为两个阶段:第一阶段是信号的正向传播过程;输入信息通过输入层、隐层逐层处理并计算每个单元的实际输出值;第二阶段是误差的反向传递过程;若在输入层未能得到期望的输出值,则逐层递归的计算实际输出和期望输出的差值(即误差),以便根据此差值调节权值。
这种过程不断迭代,最后使得信号误差达到允许或规定的范围之内。
基于BP 算法的多层前馈型网络模型的拓扑结构如上图所示。
BP 算法的数学描述:三层BP 前馈网络的数学模型如上图所示。
三层前馈网中,输入向量为:Tn i x x x x X),...,,...,,(21=;隐层输入向量为:Tm j y y y y Y),...,...,,(21=;输出层输出向量为:Tl k o o o o O),...,...,,(21=;期望输出向量为:Tl k d d d d d),...,...,(21=。
输入层到隐层之间的权值矩阵用V 表示,Ym j v v v v V),...,...,(21=,其中列向量j v 为隐层第j 个神经元对应的权向量;隐层到输出层之间的权值矩阵用W 表示,),...,...,(21l k w w w w W =,其中列向量k w 为输出层第k 个神经元对应的权向量。
下面分析各层信号之间的数学关系。
对于输出层,有∑====mj x v net mj netf yi ij jjj,...,2,1,,...,2,1),(对于隐层,有∑=====mj i jkkkk lk y wnetl k netf O 0,...,2,1,,...,2,1),(以上两式中,转移函数f(x)均为单极性Sigmoid 函数:xex f -+=11)(f(x)具有连续、可导的特点,且有)](1)[()('x f x f x f -=以上共同构成了三层前馈网了的数学模型。
一、实验目的与要求1. 掌握神经网络的原理和基本结构;2. 学会使用Python实现神经网络模型;3. 利用神经网络对手写字符进行识别。
二、实验内容与方法1. 实验背景随着深度学习技术的不断发展,神经网络在各个领域得到了广泛应用。
在手写字符识别领域,神经网络具有较好的识别效果。
本实验旨在通过实现神经网络模型,对手写字符进行识别。
2. 神经网络原理神经网络是一种模拟人脑神经元结构的计算模型,由多个神经元组成。
每个神经元接收来自前一个神经元的输入,通过激活函数处理后,输出给下一个神经元。
神经网络通过学习大量样本,能够自动提取特征并进行分类。
3. 实验方法本实验采用Python编程语言,使用TensorFlow框架实现神经网络模型。
具体步骤如下:(1)数据预处理:从公开数据集中获取手写字符数据,对数据进行归一化处理,并将其分为训练集和测试集。
(2)构建神经网络模型:设计网络结构,包括输入层、隐藏层和输出层。
输入层用于接收输入数据,隐藏层用于提取特征,输出层用于输出分类结果。
(3)训练神经网络:使用训练集对神经网络进行训练,调整网络参数,使模型能够准确识别手写字符。
(4)测试神经网络:使用测试集对训练好的神经网络进行测试,评估模型的识别效果。
三、实验步骤与过程1. 数据预处理(1)从公开数据集中获取手写字符数据,如MNIST数据集;(2)对数据进行归一化处理,将像素值缩放到[0, 1]区间;(3)将数据分为训练集和测试集,比例约为8:2。
2. 构建神经网络模型(1)输入层:输入层节点数与数据维度相同,本实验中为28×28=784;(2)隐藏层:设计一个隐藏层,节点数为128;(3)输出层:输出层节点数为10,对应10个类别。
3. 训练神经网络(1)定义损失函数:均方误差(MSE);(2)选择优化算法:随机梯度下降(SGD);(3)设置学习率:0.001;(4)训练次数:10000;(5)在训练过程中,每100次迭代输出一次训练损失和准确率。
《计算智能与智能系统》
课程实验
实验题目:神经网络数值实验
实验一、利用感知器进行分类
输入代码:
%画输入向量的图像
P = [-0.5 -0.5 +0.3 -0.1 -4; -0.5 +0.5 -0.5 +1.0 5];
T = [1 1 0 0 1];
plotpv(P,T); % plotpv函数利用感知器的输入向量和目标向量来画输入向量的图像
%建立神经网络
net = newp([-40 1;-1 50],1);
hold on
%添加神经元的初始化值到分类图
linehandle = plotpc(net.IW{1},net.b{1}); % plotpc函数用来画分类线
%训练神经网络
E = 1; % E为误差
net.adaptParam.passes = 3; % 决定在训练过程中重复次数
while (sse(E)) % sse函数是用来判定误差E的函数
[net,Y,E] = adapt(net,P,T); % 利用输入样本调节神经网net
linehandle = plotpc(net.IW{1},net.b{1},linehandle);% 画出调整以后的分类线drawnow; % 延迟一段时间
end
%模拟sim
p = [0.7; 1.2];
a = sim(net,p);
% 利用模拟函数sim计算出新输入p的神经网络的输出
plotpv(p,a);
circle = findobj(gca,'type', 'line');
set(circle,'Color','red');
hold on;
plotpv(P,T);
plotpc(net.IW{1},net.b{1});
hold off;
axis([-2 2 -2 2]);
输出:
实验二、BP神经网络
(1)输入代码:
%画出非线性函数图像
k = 1;
p = [-1:.05:1];
t = sin(k*pi*p);
plot(p,t,'-')
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
%未训练网络输出
n = 10;
net = newff(minmax(p), [n,1], {'tansig''purelin'}, 'trainlm'); % 对于该初始网络,可以应用sim()函数观察网络输出
y1 = sim(net,p);
% 同时绘制网络输出曲线,并与原函数相比较
figure;
plot(p,t,'-',p,y1,'--')
title('未训练网络的输出结果');
xlabel('时间');
ylabel('仿真输出--原函数-');
%进行网络训练
net.trainParam.epochs = 50;
net.trainParam.goal = 0.01;
net = train(net,p,t);
%进行网络测试
y2 = sim(net,p);
figure;
plot(p,t,'-',p,y1,'--',p,y2,'-.')
title('训练后网络的输出结果');
xlabel('时间');
ylabel('仿真输出');
输出:
结果分析:从上图可知,没有经过训练的网络,其输出结果模拟效果比较差,经过训练的BP神经网络的模拟效果较好。
(2)改变非线性函数的K值
输入代码:
k = 5;
p = [-1:.05:1];
t = sin(k*pi*p);
plot(p,t,'-')
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
n = 10;
net = newff(minmax(p), [n,1], {'tansig''purelin'}, 'trainlm');
% 对于该初始网络,可以应用sim()函数观察网络输出
y1 = sim(net,p);
% 同时绘制网络输出曲线,并与原函数相比较
figure;
plot(p,t,'-',p,y1,'--')
title('未训练网络的输出结果');
xlabel('时间');
ylabel('仿真输出--原函数-');
net.trainParam.epochs = 50;
net.trainParam.goal = 0.01;
net = train(net,p,t);
y2 = sim(net,p);
figure;
plot(p,t,'-',p,y1,'--',p,y2,'-.')
title('训练后网络的输出结果');
xlabel('时间');
ylabel('仿真输出');
输出:
结果分析:k值只改变了非线性函数的频率,但不影响网络的训练效果。
(3)隐层神经元数目的影响
k = 5;
p = [-1:.05:1];
t = sin(k*pi*p);
plot(p,t,'-')
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
n = 50;
net = newff(minmax(p), [n,1], {'tansig''purelin'}, 'trainlm'); % 对于该初始网络,可以应用sim()函数观察网络输出
y1 = sim(net,p);
% 同时绘制网络输出曲线,并与原函数相比较
figure;
plot(p,t,'-',p,y1,'--')
title('未训练网络的输出结果');
xlabel('时间');
ylabel('仿真输出--原函数-');
net.trainParam.epochs = 50;
net.trainParam.goal = 0.01;
net = train(net,p,t);
y2 = sim(net,p);
figure;
plot(p,t,'-',p,y1,'--',p,y2,'-.')
title('训练后网络的输出结果');
xlabel('时间');
ylabel('仿真输出');
输出:
结果分析:隐藏神经元个数越多,训练速度越快,拟合效果越好。
思考题、BP神经网络
%做出非线性图
x=[-1:0.01:1];
y=[-1:0.01:1];
z=exp(x.^2+y.^2);
plot3(x,y,z,'-');
title('要逼近的非线性函数z=e^(x^2*y^2)');
grid on;
%未训练输出
n = 10;
net = newff([x;y],z,n);
% 对于该初始网络,可以应用sim()函数观察网络输出
z1 = sim(net,[x;y]);
% 同时绘制网络输出曲线,并与原函数相比较
figure;
plot3(x,y,z,'-',x,y,z1,'r--')
title('未训练网络的输出结果');grid on;
%训练网络
net.trainParam.epochs=100; % 训练时间
net.trainParam.goal=0.0001; % 精度设置
net=train(net,[x;y],z);
%训练后输出
z2=sim(net,[x;y]);
figure;
plot3(x,y,z,'-',x,y,z1,'r--',x,y,z2,'g-.');
title('训练后网络的输出结果');grid on;
输出:。