您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 神经网络一个简单实例
OpenCV的ml模块实现了人工神经网络(ArtificialNeuralNetworks,ANN)最典型的多层感知器(multi-layerperceptrons,MLP)模型。由于ml模型实现的算法都继承自统一的CvStatModel基类,其训练和预测的接口都是train(),predict(),非常简单。下面来看神经网络CvANN_MLP的使用~定义神经网络及参数:[cpp]viewplaincopy1.//SetuptheBPNetwork2.CvANN_MLPbp;3.//SetupBPNetwork'sparameters4.CvANN_MLP_TrainParamsparams;5.params.train_method=CvANN_MLP_TrainParams::BACKPROP;6.params.bp_dw_scale=0.1;7.params.bp_moment_scale=0.1;8.//params.train_method=CvANN_MLP_TrainParams::RPROP;9.//params.rp_dw0=0.1;10.//params.rp_dw_plus=1.2;11.//params.rp_dw_minus=0.5;12.//params.rp_dw_min=FLT_EPSILON;13.//params.rp_dw_max=50.;可以直接定义CvANN_MLP神经网络,并设置其参数。BACKPROP表示使用back-propagation的训练方法,RPROP即最简单的propagation训练方法。使用BACKPROP有两个相关参数:bp_dw_scale即bp_moment_scale:使用PRPOP有四个相关参数:rp_dw0,rp_dw_plus,rp_dw_minus,rp_dw_min,rp_dw_max:上述代码中为其默认值。设置网络层数,训练数据:[cpp]viewplaincopy1.//Setuptrainingdata2.floatlabels[3][5]={{0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}};3.MatlabelsMat(3,5,CV_32FC1,labels);4.5.floattrainingData[3][5]={{1,2,3,4,5},{111,112,113,114,115},{21,22,23,24,25}};6.MattrainingDataMat(3,5,CV_32FC1,trainingData);7.MatlayerSizes=(Mat_int(1,5)5,2,2,2,5);8.bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);//CvANN_MLP::SIGMOID_SYM9.//CvANN_MLP::GAUSSIAN10.//CvANN_MLP::IDENTITY11.bp.train(trainingDataMat,labelsMat,Mat(),Mat(),params);layerSizes设置了有三个隐含层的网络结构:输入层,三个隐含层,输出层。输入层和输出层节点数均为5,中间隐含层每层有两个节点。create第二个参数可以设置每个神经节点的激活函数,默认为CvANN_MLP::SIGMOID_SYM,即Sigmoid函数,同时提供的其他激活函数有Gauss和阶跃函数。使用训练好的网络结构分类新的数据:然后直接使用predict函数,就可以预测新的节点:[cpp]viewplaincopy1.MatsampleMat=(Mat_float(1,5)i,j,0,0,0);2.MatresponseMat;3.bp.predict(sampleMat,responseMat);完整程序代码:[cpp]viewplaincopy1.//TheexampleofusingBPNetworkinOpenCV2.//CodedbyL.Wei3.#includeopencv2/core/core.hpp4.#includeopencv2/highgui/highgui.hpp5.#includeopencv2/ml/ml.hpp6.#includeiostream7.#includestring8.9.usingnamespacestd;10.usingnamespacecv;11.12.intmain()13.{14.//SetuptheBPNetwork15.CvANN_MLPbp;16.//SetupBPNetwork'sparameters17.CvANN_MLP_TrainParamsparams;18.params.train_method=CvANN_MLP_TrainParams::BACKPROP;19.params.bp_dw_scale=0.1;20.params.bp_moment_scale=0.1;21.//params.train_method=CvANN_MLP_TrainParams::RPROP;22.//params.rp_dw0=0.1;23.//params.rp_dw_plus=1.2;24.//params.rp_dw_minus=0.5;25.//params.rp_dw_min=FLT_EPSILON;26.//params.rp_dw_max=50.;27.28.//Setuptrainingdata29.floatlabels[3][5]={{0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}};30.MatlabelsMat(3,5,CV_32FC1,labels);31.32.floattrainingData[3][5]={{1,2,3,4,5},{111,112,113,114,115},{21,22,23,24,25}};33.MattrainingDataMat(3,5,CV_32FC1,trainingData);34.MatlayerSizes=(Mat_int(1,5)5,2,2,2,5);35.bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);//CvANN_MLP::SIGMOID_SYM36.//CvANN_MLP::GAUSSIAN37.//CvANN_MLP::IDENTITY38.bp.train(trainingDataMat,labelsMat,Mat(),Mat(),params);39.40.41.//Dataforvisualrepresentation42.intwidth=512,height=512;43.Matimage=Mat::zeros(height,width,CV_8UC3);44.Vec3bgreen(0,255,0),blue(255,0,0);45.//ShowthedecisionregionsgivenbytheSVM46.for(inti=0;iimage.rows;++i)47.for(intj=0;jimage.cols;++j)48.{49.MatsampleMat=(Mat_float(1,5)i,j,0,0,0);50.MatresponseMat;51.bp.predict(sampleMat,responseMat);52.float*p=responseMat.ptrfloat(0);53.floatresponse=0.0f;54.for(intk=0;k5;i++){55.//coutp[k];56.response+=p[k];57.}58.if(response2)59.image.atVec3b(j,i)=green;60.else61.image.atVec3b(j,i)=blue;62.}63.64.//Showthetrainingdata65.intthickness=-1;66.intlineType=8;67.circle(image,Point(501,10),5,Scalar(0,0,0),thickness,lineType);68.circle(image,Point(255,10),5,Scalar(255,255,255),thickness,lineType);69.circle(image,Point(501,255),5,Scalar(255,255,255),thickness,lineType);70.circle(image,Point(10,501),5,Scalar(255,255,255),thickness,lineType);71.72.imwrite(result.png,image);//savetheimage73.74.imshow(BPSimpleExample,image);//showittotheuser75.waitKey(0);76.77.}结果:
本文标题:神经网络一个简单实例
链接地址:https://www.777doc.com/doc-2148063 .html