Advertisement
diabolusUmarov

MLP

Jan 7th, 2018
585
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. #include <opencv2/core.hpp>
  2. #include <opencv2/imgcodecs.hpp>
  3. #include <opencv2/highgui.hpp>
  4. #include <opencv2/imgproc/imgproc.hpp>
  5. #include <opencv2/ml/ml.hpp>
  6.  
  7. #include <iostream>
  8. #include <iomanip>
  9.  
  10. using namespace cv;
  11. using namespace ml;
  12. using namespace std;
  13.  
  14. #include "diaconverter.hpp"
  15.  
  16. void print(Mat& mat, int prec)
  17. {
  18. for (int i = 0; i<mat.size().height; i++)
  19. {
  20. cout << "[";
  21. for (int j = 0; j<mat.size().width; j++)
  22. {
  23. cout << fixed << setw(2) << setprecision(prec) << mat.at<float>(i, j);
  24. if (j != mat.size().width - 1)
  25. cout << ", ";
  26. else
  27. cout << "]" << endl;
  28. }
  29. }
  30. }
  31.  
  32. int main()
  33. {
  34. const int hiddenLayerSize = 10;
  35. int trainSamples = 512;
  36.  
  37. float inputTrainingDataArray[trainSamples][1];
  38. float outputTrainingDataArray[trainSamples][10];
  39.  
  40. for(int i=0;i<trainSamples;i++)
  41. {
  42. int r = (rand() % 1023);
  43. inputTrainingDataArray[i][0] = r;
  44.  
  45. vector<int> a = int2bin(r);
  46.  
  47. for(int ant=0;ant<a.size();ant++)
  48. {
  49. outputTrainingDataArray[i][ant] = a[ant];
  50. }
  51.  
  52. bool test = true;
  53.  
  54. for(int x=0;x<a.size();x++)
  55. {
  56. if(a[x] != 0 && a[x] != 1) test = false;
  57. }
  58.  
  59. if(!test) i--;
  60. }
  61.  
  62.  
  63. Mat inputTrainingData = Mat(trainSamples, 1, CV_32F, inputTrainingDataArray);
  64.  
  65. Mat outputTrainingData = Mat(trainSamples, 10, CV_32F, outputTrainingDataArray);
  66.  
  67. Ptr<ANN_MLP> mlp = ANN_MLP::create();
  68.  
  69. Mat layersSize = Mat(5, 1, CV_16U);
  70. layersSize.row(0) = Scalar(inputTrainingData.cols);
  71. layersSize.row(1) = Scalar(hiddenLayerSize);
  72. layersSize.row(2) = Scalar(hiddenLayerSize);
  73. layersSize.row(3) = Scalar(hiddenLayerSize);
  74. layersSize.row(4) = Scalar(outputTrainingData.cols);
  75. mlp->setLayerSizes(layersSize);
  76.  
  77. mlp->setActivationFunction(ml::ANN_MLP::SIGMOID_SYM,0,0);
  78.  
  79. TermCriteria termCrit = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 900, 0.000000001);
  80.  
  81. mlp->setTermCriteria(termCrit);
  82.  
  83. mlp->setTrainMethod(ml::ANN_MLP::BACKPROP, 0.000000001);
  84.  
  85. Ptr<TrainData> trainingData = TrainData::create(
  86. inputTrainingData,
  87. SampleTypes::ROW_SAMPLE,
  88. outputTrainingData
  89. );
  90.  
  91. mlp->train(trainingData, ANN_MLP::TrainFlags::UPDATE_WEIGHTS | ANN_MLP::TrainFlags::NO_INPUT_SCALE | ANN_MLP::TrainFlags::NO_OUTPUT_SCALE);
  92.  
  93. Mat sample = Mat(1, inputTrainingData.cols, CV_32F, 128);
  94. Mat result;
  95. mlp->predict(sample, result);
  96. cout << sample << " -> ";// << result << endl;
  97. print(result, 0);
  98. cout << endl;
  99.  
  100. return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement