神经网络一个简单实例
OpenCV 的 ml 模块实现了人工神经网络(人工神经网络(Artificial Neural NetworksArtificial Neural Networks,, ANNANN))最典型的多层感知器多层感知器 ((multi-layer perceptrons, MLPmulti-layer perceptrons, MLP))模型模型。由于ml 模型实现的算法都继承自统一的 CvStatModel 基类,其 训练和预测的接口都是 train,predict,非常简单。 下面来看神经网络 CvANN_MLPCvANN_MLP 的使用 定义神经网络及参数定义神经网络及参数 [cpp][cpp]view plain copy 1.//Setup the BPNetwork 2. CvANN_MLP bp; 3.// Set up BPNetworks parameters 4. CvANN_MLP_TrainParams params; 5. params.train_CvANN_MLP_TrainParamsBACKPROP; 6. params.bp_dw_scale0.1; 7. params.bp_moment_scale0.1; 8.//params.train_CvANN_MLP_TrainParamsRPROP; 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 神经网络,并设置其参数。 BACKPROPBACKPROP 表示使用 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][cpp]view plain copy 1.// Set up training data 2.floatfloat labels[3][5] {{0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}}; 3. Mat labelsMat3, 5, CV_32FC1, labels; 4. 5.floatfloat trainingData[3][5] { {1,2,3,4,5},{111,112,113,114,115}, {21,22,2 3,24,25} }; 6. Mat trainingDataMat3, 5, CV_32FC1, trainingData; 7. Mat layerSizesMat_1,5 5,2,2,2,5; 8. bp.createlayerSizes,CvANN_MLPSIGMOID_SYM;//CvANN_MLPSIGMOID_SYM 9.//CvANN_MLPGAUSSIAN 10.//CvANN_MLPIDENTITY 11. bp.traintrainingDataMat, labelsMat, Mat,Mat, params; layerSizes 设置了有三个隐含层的网络结构输入层,三个隐含层,输出层。输入层和输出 层节点数均为 5,中间隐含层每层有两个节点。 create 第二个参数可以设置每个神经节点的激活函数,默认为 CvANN_MLPSIGMOID_SYM,即 Sigmoid 函数,同时提供的其他激活函数有Gauss 和 阶跃函数。 使用训练好的网络结构分类新的数据使用训练好的网络结构分类新的数据 然后直接使用 predict 函数,就可以预测新的节点 [cpp][cpp] view plain copy 1.Mat sampleMat Mat_1,5 i,j,0,0,0; 2. Mat responseMat; 3. bp.predictsampleMat,responseMat; 完整程序代码完整程序代码 [cpp][cpp] view plain copy 1.//The example of using BPNetwork in OpenCV 2.//Coded by L. Wei 3.include 4.include 5.include 6.include 7.include 8. 9.usingusing namespacenamespace std; 10. usingusing namespacenamespace cv; 11. 12. intint main 13. { 14.//Setup the BPNetwork 15. CvANN_MLP bp; 16.// Set up BPNetworks parameters 17. CvANN_MLP_TrainParams params; 18. params.train_CvANN_MLP_TrainParamsBACKPROP; 19. params.bp_dw_scale0.1; 20. params.bp_moment_scale0.1; 21.//params.train_CvANN_MLP_TrainParamsRPROP; 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.// Set up training data 29.floatfloat labels[3][5] {{0,0,0,0,0},{1,1,1,1,1},{0,0,0,0,0}}; 30. Mat labelsMat3, 5, CV_32FC1, labels; 31. 32.floatfloat trainingData[3][5] { {1,2,3,4,5},{111,112,113,114,115}, {21,22,2 3,24,25} }; 33. Mat trainingDataMat3, 5, CV_32FC1, trainingData; 34. Mat layerSizesMat_1,5 5,2,2,2,5; 35. bp.cr