Ask Your Question

Revision history [back]

Whats the problem with my ANN_MLP?

Guys... I'm using the ANN_MLP to predict values like a simple regression.

But, don't know why, isn't working.

My code >> http://pastebin.com/nrczCHxW The output from this code >> http://pastebin.com/BWCY9ZFp

It's should work like this: Train with random numbers and random labels, like ordened pairs (x,y). Test with the first fours elements on the training set. The output should be the first fours elements from the label set...

Someone can help me??

click to hide/show revision 2
No.2 Revision

updated 2016-05-12 13:53:00 -0500

berak gravatar image

Whats the problem with my ANN_MLP?

Guys... I'm using the ANN_MLP to predict values like a simple regression.

But, don't know why, isn't working.

My code >> http://pastebin.com/nrczCHxW The output from this code >> http://pastebin.com/BWCY9ZFp

It's should work like this: Train with random numbers and random labels, like ordened pairs (x,y). Test with the first fours elements on the training set. The output should be the first fours elements from the label set...

Someone can help me??

#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;

int main( int argc, char** argv ){
    Mat matTrainFeatures(100,1,CV_32F);
    randu(matTrainFeatures,0,100);

    Mat matTrainLabels(100,1,CV_32F);
    randu(matTrainLabels,0,100);

    Mat matSample(4,1,CV_32F);
    //randu(matSample,0,100);
    matSample.at<float>(0,0) = matTrainFeatures.at<float>(0,0);
    matSample.at<float>(1,0) = matTrainFeatures.at<float>(1,0);
    matSample.at<float>(2,0) = matTrainFeatures.at<float>(2,0);
    matSample.at<float>(3,0) = matTrainFeatures.at<float>(3,0);

    Mat matSampleLabels(1,1,CV_32F);

    Mat matResults(4,1,CV_32F);
    //Mat matResults(5,1,CV_32F);

    Ptr<TrainData> trainingData;
    trainingData=TrainData::create(matTrainFeatures,ROW_SAMPLE,matTrainLabels);

    Ptr<ANN_MLP> lr = ANN_MLP::create();
    Mat layers(3,1,CV_32FC1);
    layers.row(0) = 1;
    layers.row(1) = 100;
    layers.row(2) = 1;
    lr->setBackpropMomentumScale(0.05f);
    lr->setLayerSizes(layers);
    lr->setBackpropWeightScale(0.05f);
    lr->setActivationFunction(ANN_MLP::SIGMOID_SYM, 1, 1);
    lr->setTrainMethod(ANN_MLP::BACKPROP, 0.001);
    lr->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 300, FLT_EPSILON));

    //lr->train(trainingData);
    for(int j = 0; j < 12; j++){
        for(int i = 0; i < matTrainFeatures.rows; i++){
            lr->train(matTrainFeatures.row(i),ROW_SAMPLE,matTrainLabels.row(i));   
        }  
    }  
    lr->predict(matSample,matResults);

    //Just checking the settings
    cout<<"Training data: "<<endl
        <<"getNSample\t"<<trainingData->getNSamples()<<endl
        <<"getSamples\n"<<trainingData->getSamples()<<endl
        <<"getResponses\n"<<trainingData->getTrainResponses()<<endl
        <<endl;

    //confirming sample order
    cout<<"matSample: "<<endl
        <<matSample<<endl
        <<endl;

    //displaying the results
    cout<<"matResults: "<<endl
        <<matResults<<endl
        <<endl;

    return 0;

    }