Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <opencv2/core.hpp>
- #include <opencv2/imgcodecs.hpp>
- #include <opencv2/highgui.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- #include <opencv2/ml/ml.hpp>
- #include <iostream>
- #include <iomanip>
- using namespace cv;
- using namespace ml;
- using namespace std;
- #include "diaconverter.hpp"
- void print(Mat& mat, int prec)
- {
- for (int i = 0; i<mat.size().height; i++)
- {
- cout << "[";
- for (int j = 0; j<mat.size().width; j++)
- {
- cout << fixed << setw(2) << setprecision(prec) << mat.at<float>(i, j);
- if (j != mat.size().width - 1)
- cout << ", ";
- else
- cout << "]" << endl;
- }
- }
- }
- int main()
- {
- const int hiddenLayerSize = 10;
- int trainSamples = 512;
- float inputTrainingDataArray[trainSamples][1];
- float outputTrainingDataArray[trainSamples][10];
- for(int i=0;i<trainSamples;i++)
- {
- int r = (rand() % 1023);
- inputTrainingDataArray[i][0] = r;
- vector<int> a = int2bin(r);
- for(int ant=0;ant<a.size();ant++)
- {
- outputTrainingDataArray[i][ant] = a[ant];
- }
- bool test = true;
- for(int x=0;x<a.size();x++)
- {
- if(a[x] != 0 && a[x] != 1) test = false;
- }
- if(!test) i--;
- }
- Mat inputTrainingData = Mat(trainSamples, 1, CV_32F, inputTrainingDataArray);
- Mat outputTrainingData = Mat(trainSamples, 10, CV_32F, outputTrainingDataArray);
- Ptr<ANN_MLP> mlp = ANN_MLP::create();
- Mat layersSize = Mat(5, 1, CV_16U);
- layersSize.row(0) = Scalar(inputTrainingData.cols);
- layersSize.row(1) = Scalar(hiddenLayerSize);
- layersSize.row(2) = Scalar(hiddenLayerSize);
- layersSize.row(3) = Scalar(hiddenLayerSize);
- layersSize.row(4) = Scalar(outputTrainingData.cols);
- mlp->setLayerSizes(layersSize);
- mlp->setActivationFunction(ml::ANN_MLP::SIGMOID_SYM,0,0);
- TermCriteria termCrit = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 900, 0.000000001);
- mlp->setTermCriteria(termCrit);
- mlp->setTrainMethod(ml::ANN_MLP::BACKPROP, 0.000000001);
- Ptr<TrainData> trainingData = TrainData::create(
- inputTrainingData,
- SampleTypes::ROW_SAMPLE,
- outputTrainingData
- );
- mlp->train(trainingData, ANN_MLP::TrainFlags::UPDATE_WEIGHTS | ANN_MLP::TrainFlags::NO_INPUT_SCALE | ANN_MLP::TrainFlags::NO_OUTPUT_SCALE);
- Mat sample = Mat(1, inputTrainingData.cols, CV_32F, 128);
- Mat result;
- mlp->predict(sample, result);
- cout << sample << " -> ";// << result << endl;
- print(result, 0);
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement