神经网络的图像识别技术及方法分析陈雪最全word资料Word格式.docx
《神经网络的图像识别技术及方法分析陈雪最全word资料Word格式.docx》由会员分享,可在线阅读,更多相关《神经网络的图像识别技术及方法分析陈雪最全word资料Word格式.docx(39页珍藏版)》请在冰豆网上搜索。
BP神经网络是目前神经网络使用最广泛的结构,它是单向传输多层,属于前向网络。
一层或者是多层的隐层节点是其输出节点最主要的形式,其同层的节点之间不存在耦合的问题,在开展信号输入操作的过程中,其信号的传递过程中是通过输入层节点诸葛传递到隐层节点的,最终传递至输出节点,在整个信号传输过程中,一个层的节点不会对下层的节点输出工作产生影响。
作为BP神经网络中最为常用的算法,BP算法主要是对一组样本实施输出转化,从而使其能够形成非线性优化,在应用非线性Sigmoid函数实施处理,这其中存在三层神经网络可于随意精度接近任何连续性函数。
BP网络理论及实际应用等方面都较为成熟,但其间也存在诸多问题,如:
其训练学习的速度是比较慢的,在开展算法学习的过程中,很容易陷入到局部极小点的问题当中,对学习效率产生影响,应用BP算法开展计算,可以将网络的权值收敛到一个解,但这却不能确保所求的误差小于平面全局的最小解,出现这种情况,该误差很有可能是局部的极小解,为了有效的解决该问题,需要对算法进行相应的改进:
通过附加动量法,能够促使在网络权值修正工作中,对误差曲面上的变化趋势及误差对梯度的作用予以全面的考虑。
此方式于反向传播中,各个权值及阈值变化加上正比于前次权值及阈值变化量值,从而形成新型权值及阈值变化;
在应用自适应学习速率法开展计算的过程中,学习率通常会对权值空间中的权值进行控制,使其能够与梯度方向的变化情况对应,也就是说学习率比较大时,相对应的学习速度及会比较快,但是这也不排除个别的震荡情况,该问题的处理则是于训练中自动调整学习速率,注重权值修正值检查。
4神经网络图像识别
摄像仪或传感器等输入图像识别系统之后,其目标图像不可与系统所有的参考图像全部相同,这主要是因为对应干扰和放缩与旋转等问题。
文中基于神经网络对畸变图像识别进行深层分析,同时用CCD摄像头来采集图像信息,在这过程中改变摄像头方位采集最易出现畸变的图像,务必确保这些目标畸变信息全面,从而使得畸变图像所带有的信息组成样本库。
将样本库中的图像信息输进电脑,对此进行模至数的转化,最终成为数字图像,运用数字滤波处理数字图像信息,确保其间不存在噪音或是杂质类信息。
把样本图像数字信息输进神经网络中进行训练,使其生成图像识别神经网络系统。
图像识别时应用CCD摄像头识别图像采集,将其模型转为数通信设计与应用39
字,再实施滤波处理之后,将其输入到网络识别系统当中,其能够开展快速的计算,并且能够对结果进行识别,将神经网络理论与图像识别技术相结合,能够有效的实现神经网络信息系统的一致性,并且能够将其在网络连接结果与权值上进行存储,通过此种方式还能够促进管理效率的提升,并且对于知识库的良好构建也具有积极的作用;
另一方面,神经网络系统当中包含有图像信息处理的容错,在图形传感器受到干扰时,其中的容错功能能够实现自动识别,以便于系统能够正常的工作与输出,大大提升了输出信息的准确可靠性,神经网络自学习和自组织,这可促使系统合理识别不断变化的环境,可实现不确定性信息图像识别。
或是神经网络并行结构,以及并行处理体系,促使信息快速处理,以适应图像识别对实时处理的要求。
5结束语
图像识别关乎大量信息运算,其间应具备极强的处理速度及识别精度,神经网络实时性、容错性务必适应图像识别各方面要求。
神经网络图像识别首先是提取图像特征,再将所提取的图像特征发送于神经网上,用识别器对其进行深层识别。
神经网络识别图像可行性高,但是其间网络规模及复杂图像目标识别等方面问题应给予深层研究。
科学技术水平的不断提升,可使得图像识别技术更能广泛应用于诸多领域,数字图像处理技术发展前景可观,可发展为独立且具备强大生命力的一门学科。
本文就神经网络图像识别技进行了详细阐述,深层分析了图像识别技术及BP神经网络结构和改进算法,基于此进行了神经网络图像识别,以期提升国内神经网络图像识别技术水平及应用方法。
参考文献
[1]姚一波,王纪亮.提高BP网络训练速度的研究[J].信息技术,2020(1.
[2]许延发,张敏.改进的BP算法在多目标识别中的应用[J].光学精密工程,2020(5.
[3]王宗炎,洪振华.网学习算法的改进及其在模式识别中的应用.南京航空航[J].天大学学报,2020(11.
收稿日期:
2020-12-20
!
宝鸡联通关口局融合工作探讨
张晓兰
(中国联通宝鸡分公司运行维护部,陕西宝鸡721000【摘要】随着中国电信行业新一轮重组的完成,由原来单一业务运营商变成全业务运营商。
重组后各运营商普遍存在网络结构重叠、复杂的
现状。
建立统一的关口局,实现网络互联是目前全业务运营商通信网络发展的必然趋势。
本文以宝鸡联通为例,介绍了关口局融合建设方案以及融合中重点关注的问题。
【关键词】重组;
移动网;
固网;
关口局;
融合【中图分类号】TN915.02
【文献标识码】A
【文章编号】1006-4222(202001-0040-02
1关口局融合背景
2020年电信运营商重组后,三大运营商由原来单一业务
运营商变成全业务运营商,网络重叠、重复建设、设备利用率低等问题随之而来。
现有的互联互通方式存在以下问题:
1.1路由复杂、
资源浪费重组后,各运营商的移动网与固网均由各自的关口局来
完成与其它运营商网间互通。
这样势必会造成网络结构复杂,路由不统一,关口局与网间各互联关口局局间中继电路资源不能共享等问题,同时网络运营成本及维护的复杂度也大幅提升,网络结构复杂。
1.2计费复杂、
结算麻烦移动网、固网与各运营商的网间结算均为独立结算。
移动
网和固网结算、计费标准不同,和其他运营商网间结算点不统一,增加了网间计费/结算工作的复杂度。
1.3不利于后期业务的开展
各运营商的业务发展目标是全业务运营,从技术的发展及业务的推动角度讲,两张独立的网络在业务上要实现融合是比较困难的,因此移动网、固网的网络融合势在必行,而两网的融合直接需要建设统一的互联互通网关。
由此可见,以上存在问题将直接影响网络及业务的发展,关口局的融合工作已经成为非常迫切解决的问题。
2联通关口局融合方案探讨
2.1联通融合关口局的目标架构
中国联通网间关口局的目标架构原则上每个本地网成对设置具有寻址功能的、业务融合的网间关口局。
统一联通移动
网、固网与其它运营商的互联点,以及统一的网间结算采集点。
此外,目标架构的网间融合关口局还应负责联通移动网与固网之间的语音互通。
2.2联通关口局融合方案
关口局的融合工作需结合网络实际现状、业务发展需求,在提升网络安全性的同时,提高资源的利用率,适应未来网络建设、新技术发展的需要。
由于联通各地的网络现状不同,融合方案有以下二种:
方案一:
移动网建设有成对软交换关口局的,由于软交换关口局在容量、设备处理能力能及业务的支撑上均满足融合关口局的要求,可根据融合后业务的需求,对现在软交换关口局进行硬件扩容和软件升级工作,即可完成关口局的融合建设。
此方案的优点是节约成本、且可快速实施。
方案二:
没有建设有成对软交换关口局的,需结合网络现状、业务需求及成本综合考虑是否新建软交换关口局作为融合关口局或是采取扩容现有的关口局作为融合关口局。
需要注意的是,如采用现在的传统关口局作为融合关口局,则
通信设计与应用
40
神经网络文字识别关键代码
下面列出bp网络训练及识别的完整源代码bp.h。
#include<
stdio.h>
math.h>
time.h>
stdlib.h>
#defineBIGRND32767
/************************函数声明部分*****************************/
//随机数产生函数
doubledrnd();
doubledpn1();
//S函数
doublesquash(doublex);
//分配1维double型的内存
double*alloc_1d_dbl(intn);
//分配2维double型的内存
double**alloc_2d_dbl(intm,intn);
//初始化BP网络
voidbpnn_initialize(intseed);
//随机初始化权值
voidbpnn_randomize_weights(double**w,intm,intn);
//零初始化权值
voidbpnn_zero_weights(double**w,intm,intn);
//信息的前向传输
voidbpnn_layerforward(double*l1,double*l2,double**conn,intn1,intn2);
//误差输出
voidbpnn_output_error(double*delta,double*target,double*output,intnj);
//隐层误差
voidbpnn_hidden_error(double*delta_h,intnh,double*delta_o,intno,double**who,double*hidden);
//根据误差调整权值
voidbpnn_adjust_weights(double*delta,intndelta,double*ly,intnly,double**w,double**oldw,doubleeta,doublemomentum);
//保存权值
voidw_weight(double**w,intn1,intn2,char*name);
//读取权值
boolr_weight(double**w,intn1,intn2,char*name);
//保存Bp网络各层结点数目
voidw_num(intn1,intn2,intn3,char*name);
//读取Bp网络各层结点数目
boolr_num(int*n,char*name);
//特征提取
voidcode(BYTE*image,int*p,intw,inth,intdw);
//BP网络训练
voidBpTrain(HDIBhDIB,intn_hidden,doublemin_ex,doublemomentum,doubleeta,intwidth,intheight);
//利用BP网络进行识别
voidCodeRecognize(HDIBhDIB,intwidth,intheight,intn_in,intn_hidden,intn_out);
/**********************************************************************/
/******************以下是函数的实现部分***********************************/
/***返回0-1的双精度随机数***/
doubledrnd()
{
//BIGRND定义为随机数的最大范围
return((double)rand()/(double)BIGRND);
}
/***返回-1.0到1.0之间的双精度随机数***/
doubledpn1()
return((drnd()*2.0)-1.0);
doublesquash(doublex)
//返回S激活函数
return(1.0/(1.0+exp(-x)));
/***申请1维双精度实数数组***/
double*alloc_1d_dbl(intn)
double*new1;
//申请内存
new1=(double*)malloc((unsigned)(n*sizeof(double)));
//申请内存失败处理
if(new1==NULL){
printf("
ALLOC_1D_DBL:
Couldn'
tallocatearrayofdoubles\n"
);
return(NULL);
}
//返回申请到的内存的指针
return(new1);
/***申请2维双精度实数数组***/
double**alloc_2d_dbl(intm,intn)
inti;
//定义一二维指针
double**new1;
//先申请一维内存
new1=(double**)malloc((unsigned)(m*sizeof(double*)));
//申请失败处理
//printf("
ALLOC_2D_DBL:
tallocatearrayofdblptrs\n"
//再申请二维内存。
一维内存中存放的是指针
for(i=0;
i<
m;
i++){
new1[i]=alloc_1d_dbl(n);
//返回申请到的二维内存(可以看作矩阵)
/***设置随机数种子***/
voidbpnn_initialize(intseed)
//printf("
Randomnumbergeneratorseed:
%d\n"
seed);
srand(seed);
/***随机初始化权值***/
voidbpnn_randomize_weights(double**w,intm,intn)
inti,j;
//调用dpn1随机初始化权值
=m;
for(j=0;
j<
=n;
j++){
w[i][j]=dpn1();
}
/*******零初始化权值*******/
voidbpnn_zero_weights(double**w,intm,intn)
//将权值逐个赋0
w[i][j]=0.0;
/*********前向传输*********/
voidbpnn_layerforward(double*l1,double*l2,double**conn,intn1,intn2)
doublesum;
intj,k;
/***设置阈值***/
l1[0]=1.0;
/***对于第二层的每个神经元***/
for(j=1;
=n2;
/***计算输入的加权总和***/
sum=0.0;
for(k=0;
k<
=n1;
k++){
sum+=conn[k][j]*l1[k];
l2[j]=squash(sum);
/*输出误差*/
voidbpnn_output_error(double*delta,double*target,double*output,intnj)
intj;
doubleo,t,errsum;
//先将误差归零
errsum=0.0;
//循环计算delta
=nj;
o=output[j];
t=target[j];
//计算delta值
delta[j]=o*(1.0-o)*(t-o);
/*隐含层误差*/
voidbpnn_hidden_error(double*delta_h,intnh,double*delta_o,intno,double**who,double*hidden)
doubleh,sum,errsum;
//误差归零
//计算新delta
=nh;
h=hidden[j];
for(k=1;
=no;
sum+=delta_o[k]*who[j][k];
delta_h[j]=h*(1.0-h)*sum;
/*调整权值*/
voidbpnn_adjust_weights(double*delta,intndelta,double*ly,intnly,double**w,double**oldw,doubleeta,doublemomentum)
doublenew_dw;
intk,j;
ly[0]=1.0;
//请参考文章中BP网络权值调整的计算公式
=ndelta;
=nly;
new_dw=((eta*delta[j]*ly[k])+(momentum*oldw[k][j]));
w[k][j]+=new_dw;
oldw[k][j]=new_dw;
/*******保存权值**********/
voidw_weight(double**w,intn1,intn2,char*name)
inti,j;
double*buffer;
//创建文件指针
FILE*fp;
//打开文件
fp=fopen(name,"
wb+"
//分配缓冲区
buffer=(double*)malloc((n1+1)*(n2+1)*sizeof(double));
//填写缓冲区内容