A. BP神经网络中初始权值和阈值的设定
首先需要了解BP神经网络是一种多层前馈网络。以看一下在matlab中BP神经网络的训练函数,有梯度下降法traingd,弹性梯度下降法trainrp,自适应lr梯度下降法traingda等。
因为初始值(初始权值和阀值)都在x这个向量中,x(n,1)的长度n为:n=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum
其中inputnum*hiddennum是输入层到隐含层的权值数量,hiddennum是隐含层神经元个数(即隐含层阀值个数),hiddennum*outputnum是隐含层到输出层权值个数,outputnum是输出层神经元个数(即输出层阀值个数)。
结构
BP网络是在输入层与输出层之间增加若干层(一层或多层)神经元,这些神经元称为隐单元,它们与外界没有直接的联系,但其状态的改变,则能影响输入与输出之间的关系,每一层可以有若干个节点。
BP神经网络的计算过程由正向计算过程和反向计算过程组成。正向传播过程,输入模式从输入层经隐单元层逐层处理,并转向输出层,每~层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。
以上内容参考:网络-BP神经网络
B. BP神经网络模型各个参数的选取问题
样本变量不需要那么多,因为神经网络的信息存储能力有限,过多的样本会造成一些有用的信息被丢弃。如果样本数量过多,应增加隐层节点数或隐层数目,才能增强学习能力。
一、隐层数
一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向。一般来讲应设计神经网络应优先考虑3层网络(即有1个隐层)。一般地,靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现。对于没有隐层的神经网络模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型。因此,一般认为,应将不含隐层的网络模型归入回归分析中,技术已很成熟,没有必要在神经网络理论中再讨论之。
二、隐层节点数
在BP 网络中,隐层节点数的选择非常重要,它不仅对建立的神经网络模型的性能影响很大,而且是训练时出现“过拟合”的直接原因,但是目前理论上还没有一种科学的和普遍的确定方法。 目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况,而且多数是针对最不利的情况,一般工程实践中很难满足,不宜采用。事实上,各种计算公式得到的隐层节点数有时相差几倍甚至上百倍。为尽可能避免训练时出现“过拟合”现象,保证足够高的网络性能和泛化能力,确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。研究表明,隐层节点数不仅与输入/输出层的节点数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本数据的特性等因素有关。
C. 本人新手,在做BP神经网络的时候遇到了一个问题
不知你是不是用matlab的神经网络工具箱,因为一般神经网络都是成批处理的,每一次调整都会综合所有样本的误差进行调整,而不是一类一类图片的去调整,所以不会出现你说的现象。目前我看过的很多C++或者其它语言自己写的神经网络,都会有这样或那样的理解错误,建议先使用现成的matlab的神经网络工具箱进行训练。
另外是输入的问题,图象一般会先提取特征,再将特征作为输入。你在贴吧也提问了吧,这个我在贴吧里也回答了。
输出的问题,一般模式识别会用 0 1向量来代表,例如你有三类,目标输出应该是[ 0 1 0]这样,来代表它是第2类, 训练的时候用 0 1 0,当然,预测到的可能是[ 0.1 0.9 0.1]这样。
这是我所想到的问题,楼主看看是不是这样一回事。
下面是我的一些建议:
改为用神经网络工具箱。
借鉴《 MATLAB神经网络原理与实例精解 》里的 基于概率神经网络的手写体数字识别 ,对图象作预处理。
参考2012Bmatlab R2012b oolbox net ndemos下的classify_crab_demo例子。调用patternnet建立模式识别网络。
可以到 《神经网络之家》 学习神经网络。
D. BP神经网络输入层神经元个数是越多越好吗
作非线性拟合的话,一般隐藏层是1-2层;至于隐藏层神经元数目也并不是越多越好,太多可能出现过拟合现象,具体的话需要尝试,也可以参考一些经验公式。
E. BP神经网络中的训练函数如何选取
神经网络不同的网络有这不同的训练函数,BP神经网络有两种训练函数,trainbp(),利用BP算法训练前向神经网络。trainbpx(),利用快速BP算法训练前向神经网络,即采用了动量或自适应学习,可减少训练时间,tansig函数是神经元的传递函数,与训练函数无关,在trainbp()函数中含有要训练神经元的函数。
F. BP神经网络中隐藏层节点个数怎么确定最佳
神经网络算法隐含层的选取:构造法,删除法,黄金分割法。
首先在[a,b]内寻找理想的隐含层节点数,这样就充分保证了网络的逼近能力和泛化能力,为满足高精度逼近的要求,再按照黄金分割原理拓展搜索区间;
即得到区间[b,c](其中b=0.619*(c-a)+a),在区间[b,c]中搜索最优,则得到逼近能力更强的隐含层节点数,在实际应用根据要求,从中选取其一即可。
计算过程
BP神经网络的计算过程由正向计算过程和反向计算过程组成。正向传播过程,输入模式从输入层经隐单元层逐层处理,并转向输出层,每一层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。
以上内容参考:网络-BP神经网络
G. BP神经网络学习样本是不是越多越好!
这个没有明确要求,样本也不是越多越好。通常情况下,你的样本可以一部分用来做验证。加速你有100个样本,90%用来做训练,10%用来做验证等,当然,有时候还得留下10%做测试用。我个人的经验是,样本数尽量在10以上吧。
H. Matlab BP神经网络隐层选择几层合适隐层中的神经节点选择几个合适
我是一个一个挨着顺序试的,把神经元的节点一个个的增加,记录下每次的误差。一般来说,当神经元个数增加到某一个数后,误差就稳定了或者出现误差增大的情况。把误差最小的那个点作为较优点。