人工神经网络(Artificial Neural Networks)(简称ANN)系统从20 世纪40 年代末诞生至今仅短短半个多世纪,但由于他具有信息的分布存储、并行处理以及自学习能力等优点,已经在信息处理、模式识别、智能控制及系统建模等领域得到越来越广泛的应用。尤其是基于误差反向传播(Error Back Propagation)算法的多层前馈网络(Multiple-Layer Feedforward Network)(简称BP 网络),可以以任意精度逼近任意的连续函数,所以广泛应用于非线性建模、函数逼近、模式分类等方面。
成都创新互联公司是专业的舞钢网站建设公司,舞钢接单;提供网站制作、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行舞钢网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
目标识别是模式识别领域的一项传统的课题,这是因为目标识别不是一个孤立的问题,而是模式识别领域中大多数课题都会遇到的基本问题,并且在不同的课题中,由于具体的条件不同,解决的方法也不尽相同,因而目标识别的研究仍具有理论和实践意义。这里讨论的是将要识别的目标物体用成像头(红外或可见光等)摄入后形成的图像信号序列送入计算机,用神经网络识别图像的问题。
一、BP 神经网络
BP 网络是采用Widrow-Hoff 学习算法和非线性可微转移函数的多层网络。一个典型的BP 网络采用的是梯度下降算法,也就是Widrow-Hoff 算法所规定的。backpropagation 就是指的为非线性多层网络计算梯度的方法。一个典型的BP 网络结构如图所示。
我们将它用向量图表示如下图所示。
其中:对于第k 个模式对,输出层单元的j 的加权输入为
该单元的实际输出为
而隐含层单元i 的加权输入为
该单元的实际输出为
函数f 为可微分递减函数
其算法描述如下:
(1)初始化网络及学习参数,如设置网络初始权矩阵、学习因子等。
(2)提供训练模式,训练网络,直到满足学习要求。
(3)前向传播过程:对给定训练模式输入,计算网络的输出模式,并与期望模式比较,若有误差,则执行(4);否则,返回(2)。
(4)后向传播过程:a. 计算同一层单元的误差;b. 修正权值和阈值;c. 返回(2)
二、 BP 网络隐层个数的选择
对于含有一个隐层的三层BP 网络可以实现输入到输出的任何非线性映射。增加网络隐层数可以降低误差,提高精度,但同时也使网络复杂化,增加网络的训练时间。误差精度的提高也可以通过增加隐层结点数来实现。一般情况下,应优先考虑增加隐含层的结点数。
三、隐含层神经元个数的选择
当用神经网络实现网络映射时,隐含层神经元个数直接影响着神经网络的学习能力和归纳能力。隐含层神经元数目较少时,网络每次学习的时间较短,但有可能因为学习不足导致网络无法记住全部学习内容;隐含层神经元数目较大时,学习能力增强,网络每次学习的时间较长,网络的存储容量随之变大,导致网络对未知输入的归纳能力下降,因为对隐含层神经元个数的选择尚无理论上的指导,一般凭经验确定。
四、神经网络图像识别系统
人工神经网络方法实现模式识别,可处理一些环境信息十分复杂,背景知识不清楚,推理规则不明确的问题,允许样品有较大的缺损、畸变,神经网络方法的缺点是其模型在不断丰富完善中,目前能识别的模式类还不够多,神经网络方法允许样品有较大的缺损和畸变,其运行速度快,自适应性能好,具有较高的分辨率。
神经网络的图像识别系统是神经网络模式识别系统的一种,原理是一致的。一般神经网络图像识别系统由预处理,特征提取和神经网络分类器组成。预处理就是将原始数据中的无用信息删除,平滑,二值化和进行幅度归一化等。神经网络图像识别系统中的特征提取部分不一定存在,这样就分为两大类:① 有特征提取部分的:这一类系统实际上是传统方法与神经网络方法技术的结合,这种方法可以充分利用人的经验来获取模式特征以及神经网络分类能力来识别目标图像。特征提取必须能反应整个图像的特征。但它的抗干扰能力不如第2类。② 无特征提取部分的:省去特征抽取,整副图像直接作为神经网络的输入,这种方式下,系统的神经网络结构的复杂度大大增加了,输入模式维数的增加导致了网络规模的庞大。此外,神经网络结构需要完全自己消除模式变形的影响。但是网络的抗干扰性能好,识别率高。
当BP 网用于分类时,首先要选择各类的样本进行训练,每类样本的个数要近似相等。其原因在于一方面防止训练后网络对样本多的类别响应过于敏感,而对样本数少的类别不敏感。另一方面可以大幅度提高训练速度,避免网络陷入局部最小点。
由于BP 网络不具有不变识别的能力,所以要使网络对模式的平移、旋转、伸缩具有不变性,要尽可能选择各种可能情况的样本。例如要选择不同姿态、不同方位、不同角度、不同背景等有代表性的样本,这样可以保证网络有较高的识别率。
构造神经网络分类器首先要选择适当的网络结构:神经网络分类器的输入就是图像的特征向量;神经网络分类器的输出节点应该是类别数。隐层数要选好,每层神经元数要合适,目前有很多采用一层隐层的网络结构。然后要选择适当的学习算法,这样才会有很好的识别效果。在学习阶段应该用大量的样本进行训练学习,通过样本的大量学习对神经网络的各层网络的连接权值进行修正,使其对样本有正确的识别结果,这就像人记数字一样,网络中的神经元就像是人脑细胞,权值的改变就像是人脑细胞的相互作用的改变,神经网络在样本学习中就像人记数字一样,学习样本时的网络权值调整就相当于人记住各个数字的形象,网络权值就是网络记住的内容,网络学习阶段就像人由不认识数字到认识数字反复学习过程是一样的。神经网络是按整个特征向量的整体来记忆图像的,只要大多数特征符合曾学习过的样本就可识别为同一类别,所以当样本存在较大噪声时神经网络分类器仍可正确识别。在图像识别阶段,只要将图像的点阵向量作为神经网络分类器的输入,经过网络的计算,分类器的输出就是识别结果。
五、仿真实验
1、实验对象
本实验用MATLAB 完成了对神经网络的训练和图像识别模拟。从实验数据库中选择0~9 这十个数字的BMP 格式的目标图像。图像大小为16×8 像素,每个目标图像分别加10%、20%、30%、40%、50%大小的随机噪声,共产生60 个图像样本。将样本分为两个部分,一部分用于训练,另一部分用于测试。实验中用于训练的样本为40个,用于测试的样本为20 个。随机噪声调用函数randn(m,n)产生。
2、网络结构
本试验采用三层的BP 网络,输入层神经元个数等于样本图像的象素个数16×8 个。隐含层选24 个神经元,这是在试验中试出的较理想的隐层结点数。输出层神经元个数就是要识别的模式数目,此例中有10 个模式,所以输出层神经元选择10 个,10 个神经元与10 个模式一一对应。
3、基于MATLAB 语言的网络训练与仿真
建立并初始化网络
1
2
3
4
5
6
7
8
% ================
S1 = 24;% 隐层神经元数目S1 选为24
[R,Q] = size(numdata);
[S2,Q] = size(targets);
F = numdata;
P=double(F);
net = newff(minmax(P),[S1 S2],{'logsig'
'logsig'},'traingda','learngdm')
这里numdata 为训练样本矩阵,大小为128×40, targets 为对应的目标输出矩阵,大小为10×40。
newff(PR,[S1 S2…SN],{TF1 TF2…TFN},BTF,BLF,PF)为MATLAB 函数库中建立一个N 层
前向BP 网络的函数,函数的自变量PR 表示网络输入矢量取值范围的矩阵[Pmin max];S1~SN 为各层神经元的个数;TF1~TFN 用于指定各层神经元的传递函数;BTF 用于指定网络的训练函数;BLF 用于指定权值和阀值的学习函数;PF 用于指定网络的性能函数,缺省值为‘mse’。
设置训练参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
net.performFcn = 'sse'; %平方和误差
性能函数
net.trainParam.goal = 0.1; %平方和误
差目标
net.trainParam.show = 20; %进程显示
频率
net.trainParam.epochs = 5000;%最大训
练步数
net.trainParam.mc = 0.95; %动量常数
网络训练
net=init(net);%初始化网络
[net,tr] = train(net,P,T);%网络训练
对训练好的网络进行仿真
D=sim(net,P);
A = sim(net,B);
B 为测试样本向量集,128×20 的点阵。D 为网络对训练样本的识别结果,A 为测试样本的网络识别结果。实验结果表明:网络对训练样本和对测试样本的识别率均为100%。如图为64579五个数字添加50%随机噪声后网络的识别结果。
六、总结
从上述的试验中已经可以看出,采用神经网络识别是切实可行的,给出的例子只是简单的数字识别实验,要想在网络模式下识别复杂的目标图像则需要降低网络规模,增加识别能力,原理是一样的。
在python语言中,random函数生成随机数,根据不同的方法生成不同范围的随机数。那么random函数具体怎么使用,操作方法如下。
1、首先在打开的软件中,random.random():返回一个随机数,范围是0到1之间。
2、random.uniform():在指定范围内,生成随机数,一个是下限,另一个是上限。
3、random.randint():生成指定范围内的整数,开始数和结束数。
4、最后使用 random.randrange():在指定范围内,按指定基数递增的集合中获得一个随机数,这样就完成了。
白噪声是时间序列预测中的一个重要概念。如果一个时间序列是白噪声,它是一个随机数序列,不能预测。如果预测误差不是白噪声,它暗示了预测模型仍有改进空间。
什么是白噪声时间序列?
时间序列可能是白噪声。时间序列如果变量是独立的且恒等分布的均值为0,那么它是白噪声。这意味着所有变量具有相同的方差 (sigma^2),并且每个值与该系列中的所有其他值具有零相关。
如果序列中的变量被高斯分布绘制,则该系列称为高斯白噪声。
为什么这么重要?
白噪声是时间序列分析和预测中的一个重要的概念。
重要的两个主要原因为:
1.可预测性:如果你的时间序列是白噪声,那么根据定义它是随机的。你无法对它合理的建模并进行预测。
2.模型诊断:时间序列上一系列误差的预测模型最好是白噪声。
模型诊断是时间序列预测的重要领域。
时间序列数据在潜在的因素产生的信号上被预测,它包含一些白噪声成分。
例如:
y(t)= signal(t)+ noise(t)
通过时间序列预测模型进行预测,可以对其进行收集和分析。在理想情况下,预测误差应该是白噪声。
当预测误差为白噪声时,意味着时间序列中的所有信号已全部被模型利用进行预测。剩下的就是无法建模的随机波动。
模型预测的信号不是白噪声则表明可以进一步对预测模型改进。
你的时间序列白噪音吗?
你的时间序列如果符合下面条件则不是白噪声:
你的序列均值为零吗?
方差随时间变化吗?
值与延迟值相关吗?
你可以用一些工具来检查你的时间序列是否为白噪音:
创建一个折线图。检查总体特征,如变化的平均值,方差或延迟变量之间的明显关系。
计算汇总统计。对照序列中有意义的连续块的均值和方差,检查整个序列的均值和方差(如年、月、日)。
创建一个自相关的图。检查延迟变量之间的总体相关性。
白噪声时间序列的例子
在本节中,我们将使用Python创建一个高斯白噪声序列并做一些检查。它有助于在实践中创建和评估白噪声时间序列。它将提供参考框架和示例图并且使用和比较自己的时间序列项目的统计测试,以检查它们是否为白噪声
首先,我们可以使用随机模块的gauss()函数创建一个1,000个随机高斯变量的列表。
我们将从高斯分布提取变量:平均值(mu)0.0和标准偏差(sigma)1.0。
一旦创建,为方便起见,我们可以在Pandas序列中打包这个列表。
from randomimport gaussfrom randomimport seedfrom pandasimport Seriesfrom pandas.tools.plottingimport autocorrelation_plot
# seed random number generatorseed(1)# create white noise series
series= [gauss(0.0,1.0)for iin range(1000)]series= Series(series)
接下来,我们可以计算和打印一些汇总统计数据,包含序列的平均值和标准偏差。
# summary statsprint(series.describe())
鉴于我们在绘制随机数时定义了平均值和标准偏差,所以应该不会有意外。
count 1000.000000mean -0.013222std 1.003685min -2.96121425% -0.68419250% -0.01093475% 0.703915max 2.737260
我们可以看到平均值接近0.0,标准偏差接近1.0。考虑到样本较小预测会有些误差。
如果我们有更多的数据,将序列分成两半计算和比较每一半的汇总统计可能会更有趣。我们认为每个子系列的平均值和标准差都会相似。
现在我们可以创建一些序列的线条图。
# line plot
series.plot()pyplot.show()
我们可以看到,这个序列似乎是随机的。
我们还可以创建直方图,并确认分布是高斯分布。
# histogram plot
series.hist()pyplot.show()
事实上,直方图显示了典型的钟形曲线。
最后,我们可以创建一个自相关图并检查延迟变量的所有自相关。
# autocorrelationautocorrelation_plot(series)pyplot.show()
自相关图没有显示任何显著的自相关特征。在峰值时可信度达在95%和99%,但这只是统计的偶然情况。
为了完整性,下面提供了完整的代码清单。
from randomimport gaussfrom randomimport seedfrom pandasimport Seriesfrom pandas.tools.plottingimport autocorrelation_plotfrom matplotlibimport pyplot
# seed random number generatorseed(1)# create white noise series
series= [gauss(0.0,1.0)for iin range(1000)]series= Series(series)# summary statsprint(series.describe())# line plot
series.plot()pyplot.show()# histogram plot
series.hist()pyplot.show()# autocorrelationautocorrelation_plot(series)pyplot.show()
原文:网页链接