python bp神经网络络演算问题

博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
BP神经网络教学课件资料.ppt 38页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
(3)从后向前对各隐藏层结点
,计算误差 (2)对输出层结点
,计算误差 (4)更新权值及阈值 (1)从前向后计算隐藏层和输出层结点
和输出 源代码分析示例 Matlab C++ 几个问题 隐藏层数及隐藏层结点数的确定 若输入层和输出层采用线性转换函数,隐层采用Sigmoid转换函数,则含一个隐层的网络能够以任意精度逼近任何有理函数。 确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。
几个问题 局部极小问题 BP神经网络采用的算法,其实质是一个无约束的非线性最优化计算过程,在网络结构较大时不仅计算时间长,而且很容易限入局部极小点而得不到最优结果。 解决方法:改进BP法、遗传算法(GA)和模拟退火算法,理论上成立,实际上很难实现全局极小。应用最广的是增加了冲量(动量)项的改进BP算法。
其它问题 判断网络模型泛化能力的好坏,主要不是看测试样本误差大小的本身,而是要看测试样本的误差是否接近于训练样本和检验样本的误差。
BP神经网络学习算法的MATLAB实现
MATLAB中BP神经网络的重要函数和基本功能
函 数 名 功
能 newff() 生成一个前馈BP网络 tansig() 双曲正切S型(Tan-Sigmoid)传输函数 logsig() 对数S型(Log-Sigmoid)传输函数 traingd() 梯度下降BP训练函数 newff() 功能
建立一个前向BP网络 格式
net = newff(PR,[S1 S2...SN1],{TF1 TF2...TFN1},BTF,BLF,PF) 说明
net为创建的新BP神经网络;PR为输入的取值范围矩阵;[S1 S2…SNl]表示网络隐含层和输出层神经元的个数;{TFl TF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’;BTF表示网络的训练函数,默认为‘trainlm’;BLF表示网络的权值学习函数,默认为‘learngdm’;PF表示性能数,默认为‘mse’。
tansig() 功能
正切sigmoid激活函数 格式
a = tansig(n) 说明
双曲正切Sigmoid函数把神经元的输入范围从(-∞,+∞)映射到(-1,1)。它是可导函数,适用于BP训练的神经元。 logsig() 功能
对数Sigmoid激活函数 格式
a = logsig(N) 说明对数Sigmoid函数把神经元的输入范围从(-∞,+∞)映射到(0,1)。它是可导函数,适用于BP训练的神经元。 例,下表为某药品的销售情况: 月份 1 2 3 4 5 6 销量 00 00 月份 7 8 9 10 11 12 销量 00 56 现构建一个如下的三层BP神经网络对药品的销售进行预测: 输入层,结点数:
3 隐含层,结点数:5
激活函数: tansig 输出层,结点数:1
激活函数: logsig
采用滚动预测方式,即用前三个月的销售量来预测第四个月的销售量,如用1、2、3月的销售量为输入预测第4个月的销售量,用2、3、4月的销售量为输入预测第5个月的销售量.如此反复直至满足预测精度要求为止。
%以每三个月的销售量经归一化处理后作为输入 P=[0.3 1.0000 ;
0.0 0.7308;
1.8 0.1390;
0.0 0.1087;
0.7 0.3520;
0.0 0.0000]’; %每个输入实例对应一列,故转置
%以第四个月的销售量归一化处理后作为目标向量 T=[0.0 0.0 0.1]; %创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有5个神经%元,输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig,训练函数为梯度下降函数,即前述的标准学习算法 net=newff([0 1;0 1;0 1],[5,1],{'tansig','logsig'},'traingd'); net.trainParam.epochs=15000; %设置最大迭代次数 net.trainParam.goal=0.01; %设置目标精度 net.trainParam.lr=0.1; %设置学习速率为0.1 net=init(net); %初始化权重 net=train(net,P,T);
正在加载中,请稍后...苹果/安卓/wp
积分 28, 距离下一级还需 17 积分
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡下一级可获得
道具: 显身卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
悲催签到天数: 1 天连续签到: 1 天[LV.1]初来乍到
R语言初学者,我想用R语言实现BP神经网络的敏感度计算,用于判断各因素对结果的影响力大小
老是被删除! 如题,我想用R语言实现BP神经网络敏感度计算,用于判断影响因素的影响力大小,求大神指导
老是被删除! 如题,我想用R语言实现BP神经网络敏感度计算,用于判断影响因素的影响力大小,求大神指导
<font color="# 发表于
R语言初学者,我想用R语言实现BP神经网络的敏感度计算,用于判断各因素对结果的影响力大小用MATLAB算比较好,有图形界面,关键是比较成熟。
能知道我具体的matalb算法吗
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师2088人阅读
MachineLearning(20)
转自:,保存在此以学习。
科普:神经网络是一种运算模型,由大量的节点(或称“神经元”,或“单元”)和之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。人工神经网络通常是通过一个基于数学统计学类型的学习方法(Learning
Method)得以优化,所以人工神经网络也是数学统计学方法的一种实际应用,通过统计学的标准数学方法我们能够得到大量的可以用函数来表达的局部结构空间,另一方面在人工智能学的人工感知领域,我们通过数学统计学的应用可以来做人工感知方面的决定问题(也就是说通过统计学的方法,人工神经网络能够类似人一样具有简单的决定能力和简单的判断能力),这种方法比起正式的逻辑学推理演算更具有优势。
单个神经元(理解神经网络第一步):
a1~an为输入向量的各个分量w1~wn为神经元各个突触的权值b为偏置(bias),或者称之为阈值(threshold)f为传递函数,通常为非线性函数。一般有traingd(),tansig(),hardlim()。以下默认为hardlim()t为神经元输出
向量W为权向量向量A为输入向量,做内积需要用到转置b为偏置(bias),或者称之为阈值(threshold)f为传递函数,也即激励函数
带有 sigma 函数(顶部)和 cutoff 函数(底部)
可见,一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。
单个神经元的作用:把一个n维向量空间用一个超平面分割成两部分(称之为判断边界),给定一个输入向量,神经元可以判断出这个向量位于超平面的哪一边。(SVM也即是做的这部分工作,所以说,当单个神经元的时候,BP神经网络做的工作与SVM类似。该超平面的方程:WXT
向量W为权向量向量X为输入向量b为偏置(bias),或者称之为阈值(threshold)
首先解释一下单个神经元如何进行分类判断:
引入一个阈值逻辑单元(Threshold Logic Unit,TLU)的名词,它可以输入一组加权系数的量,对它们进行求和,如果这个和达到或者超过了某个阈值,输出一个量。
让我们用符号标注这些功能,首先,有输入值以及它们的权系数:X 1, X 2, ..., X n和 W 1, W 2, ..., W n。接着是求和计算出的 X i*W i ,产生了激发层 a,换一种方法表示:
a = (X1 * W1)+(X2 * W2)+...+(Xi * Wi)+...+ (Xn * Wn)
阈值称为 theta。最后,输出结果 y。当 a &=theta 时 y=1,反之 y=0。请注意输出可以是连续的,因为它也可以由一个 squash 函数 s(或 sigma)判定,该函数的自变量是 a,函数值在 0 和 1 之间,y=s(a)。
  假设一个 TLU 有两个输入值,它们的权系数等于 1,theta 值等于 1.5。当这个 TLU 输入 &0,0&、&0,1&、&1,0& 和 &1,1& 时,它的输出分别为 0、0、0、1。TLU 将这些输入分为两组:0 组和 1 组。就像懂得逻辑连接(布尔运算 AND)的人脑可以类似地将逻辑连接的句子分类那样,TLU 也懂得一点逻辑连接之类的东西。
神经网络的学习是模仿大脑调节神经网络连接的原理。TLU通过改变它的权值以及阈值来进行学习。回想上面,我们看到SUM()&=theta时候,TLU在临界点是输出的是1而不是0,这就相当于当SUM(Wi
(-1 * theta) &= 0的时候。这时候,我们把-1当做是一个常量输入,而他的权系数theta θ在学习过程(或者说是训练过程)中进行调整。这样,当
SUM(X i* W i)+ (-1 * theta) &= 0 时,y=1,反之 y=0。
在培训过程中,神经网络输入:
一系列需要分类的术语示例X(input)它们的正确分类或者目标Target
这样的输入可以看成一个向量:&X 1, X 2, ..., X n, theta, t&,这里 t 是一个目标或者正确分类。神经网络用这些来调整权系数,其目的使培训中的目标与其分类相匹配。因为神经网络是有指导的培训。或许你现在会问,神经网络是如何通过“调整权系数”来进行学习的?也即神经网络的学习规则。下面介绍一下:权系数的调整有一个学习规则,一个理想化的学习算法如下所示:
理想化的学习算法 fully_trained = FALSE
DO UNTIL (fully_trained):
fully_trained = TRUE
FOR EACH training_vector = &X1, X2, ..., Xn, theta, target&::
# Weights compared to theta
a = (X1 * W1)+(X2 * W2)+...+(Xn * Wn) - theta
y = sigma(a)
IF y != target:
fully_trained = FALSE
FOR EACH Wi:
MODIFY_WEIGHT(Wi)
# According to the training rule
IF (fully_trained):
有一条似乎合理的规则是基于这样一种思想,即权系数和阈值的调整应该由分式 (t - y) 确定。这个规则通过引入 alpha (0 & alpha & 1) 完成。我们把 alpha 称为 学习率。W i 中的更改值等于 (alpha * (t - y)* Xi)。当 alpha 趋向于 0 时,神经网络的权系数的调整变得保守一点;当 alpha 趋向于 1 时,权系数的调整变得激进。一个使用这个规则的神经网络称为 感知器,并且这个规则被称为 感知器学习规则。概念一下貌似太多,针对单节点的描述可以暂时到此,对于我们的主题BP网络的学习规则接下来将会描述。
神经元网络:
单层神经元网络:是最基本的神经元网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量。由于每一个神经元都会产生一个标量结果,所以单层神经元的输出是一个向量,向量的维数等于神经元的数目。 示意图:
多层神经元网络(BP网络图):
BP (Back Propagation)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。由上图可知,BP神经网络是一个三层的网络:
输入层(input layer):输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;隐藏层(Hidden Layer):中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程;输出层(Output Layer):顾名思义,输出层向外界输出信息处理结果;
  当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。
  好了,以上对于神经网络的结构以及各个组件之间的运行时关系描述到此为止,那么,现在重要的是:具体是如何在误差反向传播的过程中,对各个层权系数进行调整?规则是什么?总结上面,调整的目的即是每次训练后减少误差。可以使用最小二乘法或者是梯度下降算法。首先需要介绍一下Delta学习规则。
关于 delta 规则
感知器培训规则是基于这样一种思路 ——权系数的调整是由目标和输出的差分方程表达式决定。而 delta 规则是基于梯度降落(也即梯度下降)这样一种思路。在权系数的调整中,神经网络将会找到一种将误差减少到最小的权系数的分配方式。梯度下降参考WIKI。这里不再摘抄。
为了便于说明,将我们的网络限制为没有隐藏节点,但是可能会有不止一个的输出节点。
设p是一组培训中的一个元素,t(p,n)是相应的输出节点 n 的目标。设y(p,n)为经过神经网络处理后的结果,由前面提到过的squash函数s决定(还记得我们前面提到说这个函数只是为了将连续的输出对应到我们不连续的分类target么?这个函数本身与神经网络没有关系哈),这里a(p,n)是与p相关的n的激活函数,或者用(p,n)
=s(a(p,n))表示为与p相关的节点n的squash过的激活函数。
为网络设定权系数(每个Wi),也为每个p和n建立t(p,n)与 y(p,n)的差分,这就意味着为每个p设定了网络全部的误差(因为通过这个P求出来的结果有误差,那么久要更新所有的权系数)。因此对于每组权系数来说有一个平均误差。但是
delta 规则取决于求平均值方法的精确度以及误差。我们先不讨论细节问题,只是说一些与某些p和n相关的误差:1/2* square( t(p,n) - y(p,n) ) ;现在对于每个权系数Wi,平均误差定义如下:
FOR p = 1 TO M:
# M is number of training vectors
FOR n = 1 TO N:
# N is number of output
sum = sum + (1/2 * (t(p,n)-y(p,n))^2)
average = 1/M * sum
delta 规则就是依据这个误差的定义来定义的。因为误差是依据那些培训向量来说明的,delta 规则是一种获取一个特殊的权系数集以及一个特殊的向量的算法。而改变权系数将会使神经网络的误差最小化。我们不需要讨论支持这个算法的微积分学,只要认为任何Wi发生的变化都是如下所示就够了:
alpha * s'(a(p,n)) * (t(p,n) - y(p,n)) * X(p,i,n)
X(p,i,n)是输入到节点n的p中的第i个元素,alpha是已知的学习率。最后 s'(a(p,n))是与p相关的第n个节点激活的 squashing 函数的变化(派生)率,这就是 delta 规则。
最后说说:梯度下降算法对学习速率alpha的值非常敏感,学习速率的值越大,步长越大收敛的速度就会越快。学习速率越小,步长就小,需要迭代的次数就会多些。当alpha非常小的时候,权系数向量接近某个将误差最小化的向量。用于权系数调节的基于delta规则的算法就是如此。
继续回到BP神经网络的讨论,反向传播这一算法把支持delta规则的分析扩展到了带有隐藏节点的神经网络。为了理解这个问题,设想Bob给Alice讲了一个故事,然后Alice又讲给了Ted,Ted检查了这个事实真相,发现这个故事是错误的。现在
Ted 需要找出哪些错误是Bob造成的而哪些又归咎于Alice。当输出节点从隐藏节点获得输入,网络发现出现了误差,权系数的调整需要一个算法来找出整个误差是由多少不同的节点造成的,网络需要问,“是谁让我误入歧途?到怎样的程度?如何弥补?”这时,网络该怎么做呢?
同样源于梯度降落原理,在权系数调整分析中的唯一不同是涉及到t(p,n)与y(p,n)的差分。通常来说Wi的改变在于:
alpha * s'(a(p,n)) * d(n) * X(p,i,n)
其中d(n)是隐藏节点n的函数,让我们来看:
n 对任何给出的输出节点有多大影响;输出节点本身对网络整体的误差有多少影响。
一方面,n 影响一个输出节点越多,n 造成网络整体的误差也越多。另一方面,如果输出节点影响网络整体的误差越少,n 对输出节点的影响也相应减少。这里d(j)是对网络的整体误差的基值,W(n,j) 是 n 对 j 造成的影响,d(j) * W(n,j) 是这两种影响的总和。但是 n 几乎总是影响多个输出节点,也许会影响每一个输出结点,这样,d(n) 可以表示为:
SUM(d(j)*W(n,j))
这里j是一个从n获得输入的输出节点,联系起来,我们就得到了一个培训规则。
第1部分:在隐藏节点n和输出节点j之间权系数改变,如下所示:
alpha * s'(a(p,n))*(t(p,n) - y(p,n)) * X(p,n,j)
第 2 部分:在输入节点i和输出节点n之间权系数改变,如下所示:
alpha * s'(a(p,n)) * sum(d(j) * W(n,j)) * X(p,i,n)
这里每个从n接收输入的输出节点j都不同。关于反向传播算法的基本情况大致如此。
使误差小到适当的程度要遵循的步骤
第 1 步:输入培训向量。
第 2 步:隐藏节点计算它们的输出
第 3 步:输出节点在第 2 步的基础上计算它们的输出。
第 4 步:计算第 3 步所得的结果和期望值之间的差。
第 5 步:把第 4 步的结果填入培训规则的第 1 部分。
第 6 步:对于每个隐藏节点 n,计算 d(n)。
第 7 步:把第 6 步的结果填入培训规则的第 2 部分。
通常把第 1 步到第 3 步称为 正向传播,把第 4 步到第 7 步称为 反向传播。反向传播的名字由此而来。
参考资料:
神经网络编程入门,这儿有一个BP的matlab程序示例。
梯度下降法
神经网络介绍
wiki上面的BP介绍神经网络的问题bp神经网络训练的时候,给定误差0.01,当误差小于0.01时候就可以结束训练,请问那个误差是怎么计算的?
神经网络的问题bp神经网络训练的时候,给定误差0.01,当误差小于0.01时候就可以结束训练,请问那个误差是怎么计算的?
首先,求出实际输出和期望输出之差,然后再求这个差的均方值,输出层各单元的一般化误差定义为这个均方值对输出层输入的负偏导数.不知道我这样的表述是否清楚?本想给你看一下具体的公式,但是这里好像不支持公式编辑器里面的内容. 再问: 可以插入图片吧
我有更好的回答:
剩余:2000字
与《神经网络的问题bp神经网络训练的时候,给定误差0.01,当误差小于0.01时候就可以结束训练,请问那个误差是怎么计算的?》相关的作业问题
x^2+7x+10小于0(x+2)(x+5)0(x-2)(x+1)>0x2x^2-4x-12
要保证函数定义域为R的话,对任意的x分母都不为0,如果△>0或=0,必然存在x使分母为0,此时x就不在定义域内,不能保证函数定义域为R 再答: △0),要么恒小于0(m
你的程序训练完毕后根本就没达到目标误差,就是说训练效果不好,不能进行预测,只有训练结果好了才能预测仿真,你再改一下隐含层神经元数或者训练和传递函数试试吧~另外输入层的值可以归一化也可以不归一化,归一化后在仿真之前要反归一化.
激励函数用于神经元由输入计算输出的,而训练函数和学习函数是基于误差,来修改权值和阈值的,再就完成了一次训练,然后继续迭代,知道达到迭代次数或满足精度. 然而,学习函数和训练函数的功能貌似很相近,至于具体区别,正在纠结着我呢
训练用的数据是用来给神经网络学习和测试的,让神经网络学习到这样的输入能有怎样的输出.训练数据一般分为两组,一组用于神经网络学习(一般情况这组数据占总数据量的3/4左右,也可能更多,依情况而定),另一组是用于测试神经网络学习效果的,将测试的输出结果和输入数据应有的输出结果做比较(以均方和误差作标准),从而验证神经网络训练
一般用trainlm,超大规模的用trainscg、traingdm.trainbr用的少.具体数学原理看书去吧.
神经网络不同的网络有这不同的训练函数,BP神经网络有两种训练函数,trainbp(),利用BP算法训练前向神经网络.trainbpx(),利用快速BP算法训练前向神经网络,即采用了动量或自适应学习,可减少训练时间,tansig函数是神经元的传递函数,与训练函数无关,在trainbp()函数中含有要训练神经元的函数.
traingdx 有动量和自适应lr的梯度下降法 trainlm Levenberg - Marquardt方法traind 梯度下降法
先找一个期望函数,比如y=1/x,那么输入就是x(值随便设),理想的输出结果就是1/x.用实际的输出结果与理想的结果做运算,依据运算结果对隐层和输出层的权值矩阵进行调整.然后继续输入样本,得到结果在与理想结果运算,再权值调整.一直到最后,你的输出结果就会和你的理想结果相接近了.如果没有期望函数,或者期望的输入输出关系,
你这相当于软测量建模,你说的Targe是matlab神经网络工具箱中的吧?我也做了一个神经网络仿真,没有用那个工具箱,直接编的程,我的是二个输入四个输出,其实很简单,一看就懂,想要把qq邮箱给我,我发给你.
我现在也是学习神经网络仿真的,我想你推荐一下找一本中文版的“MATLAB神经网络应用设计”这本书很全面
net1=newff(minmax(pX),[16,1],{&#39;tansig&#39;,&#39;purelin&#39;},&#39;trainlm&#39;);&这个是激活函数的语句,但是一般不需要修改.BP神经网络是计算机自主学习的一个过程,程序员要做的就是确定隐含层神经元的数量以及训练精度,训练
这肯定是出现了过拟合了,你可以做一下改进.1.处理一下数据集,也就是说重新划分训练集和测试集2.换一个误差检验函数3.调整一下隐节点个数4.控制学习次数
阈值也是用来调节神经网络结构的,用来尽可能逼近目标值,你要是设定为阈值是0,那么训练的时候也会自动调节阈值为非零的数.书上讲的很难,建议你看几篇论文模仿做.
训练好后用“save 网络名”保存好网络,保存好的网络下次还可以用.用net.iw{1,1} net.lw{2,1} net.b{1} net.b{2}分别来查看网络的权值和阈值. 再问: 能麻烦你给我写个实例程序吗?另外{1,1} 和{2,1}怎么理解?? 再答: P=[]; T=[]; net=newff(minm
可以使用MATLAB,里面有现成的神经网络工具箱,用来建立BP网络是很简单和方便的.
你训练就是为了得到权值啊!i j k lijkl第i个神经元到第j个神经元的权值格式 再问: 每次训练权值都会变怎么办,还有权值怎么保存和下次使用?
这个包底下怎么做我不太确定,如果你是自己写训练的话,就每更新一步再乘以个矩阵让你想要保持为0的元素为0就行了 再问: 嗯,谢谢你的帮助!!自己编也行,只是觉得挺麻烦,如果可以利用一些函数或者技巧,会省很多事,谢谢你! 再答: 不用客气。我只是觉得你的要求比较特殊,很可能没有相应函数满足你的需求。再问: 嗯,但是我让矩阵
训练集样本的不同肯定会影响到权值的变化.你要训练的数据 就是你希望一个系统输入一些数据时 能固定得到的那些数据,训练集要是随即那就没意义了,神经网络权值初始值是可以随即的,但随着训练继续,权值将趋于稳定,这样才能达到神经网络的效果.

我要回帖

更多关于 bp神经网络原理 的文章

 

随机推荐