资源描述:
《神经网络一个简单实例.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、OpenCV的ml模块实现了人工神经网络(ArtificialNeuralNetworks,ANN)最典型的多层感知器(multi-layerperceptrons,MLP)模型。由于ml模型实现的算法都继承自统一的CvStatModel基类,其训练和预测的接口都是train(),predict(),非常简单。下面来看神经网络 CvANN_MLP 的使用~定义神经网络及参数:[cpp] viewplain copy 1.//Setup the BPNetwork 2. CvANN_MLP bp; 3.
2、 // Set up BPNetwork's parameters 4. CvANN_MLP_TrainParams params; 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.
3、 //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训
4、练方法。使用BACKPROP有两个相关参数:bp_dw_scale即bp_moment_scale:使用PRPOP有四个相关参数:rp_dw0,rp_dw_plus,rp_dw_minus,rp_dw_min,rp_dw_max:上述代码中为其默认值。设置网络层数,训练数据:[cpp] viewplain copy 1.// Set up training data 2. float labels[3][5] = {{0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}}; 3. Ma
5、t labelsMat(3, 5, CV_32FC1, labels); 4. 5. float trainingData[3][5] = { {1,2,3,4,5},{111,112,113,114,115}, {21,22,23,24,25} }; 6. Mat trainingDataMat(3, 5, CV_32FC1, trainingData); 7. Mat layerSizes=(Mat_(1,5) << 5,2,2,2,5); 8. bp.create(l
6、ayerSizes,CvANN_MLP::SIGMOID_SYM);//CvANN_MLP::SIGMOID_SYM 9. //CvANN_MLP::GAUSSIAN 10. //CvANN_MLP::IDENTITY 11. bp.train(trainingDataMat, labelsMat, Mat(),Mat(),
7、 params); layerSizes设置了有三个隐含层的网络结构:输入层,三个隐含层,输出层。输入层和输出层节点数均为5,中间隐含层每层有两个节点。create第二个参数可以设置每个神经节点的激活函数,默认为CvANN_MLP::SIGMOID_SYM,即Sigmoid函数,同时提供的其他激活函数有Gauss和阶跃函数。使用训练好的网络结构分类新的数据:然后直接使用predict函数,就可以预测新的节点:[cpp] viewplain copy 1.Mat sampleMat = (Mat_(1,
8、5) << i,j,0,0,0); 2. Mat responseMat; 3. bp.predict(sampleMat,responseMat); 完整程序代码:[cpp] viewplain copy 1.//The example of using BPNetwork in OpenCV