Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Predecting MLP with single sample

I have trained MLP as shown in the code below to classify images into 4 classes. My class labels are 1,2,3,4.This trains the model successfully but it thorws an Exception vector out of range during prediction

void train::trainANN(Mat hists, vector<int> labels)
{
    int cols = hists.cols;//size of input layer must be equal to this number of cols
    int rows = hists.rows;//used to determine rows in Mat of responses
    Mat_<float> responses = Mat(labels).reshape(0, rows);

    Ptr<TrainData> trainData = TrainData::create(hists, ROW_SAMPLE, responses);
    Ptr<ANN_MLP> ann = ml::ANN_MLP::create();
    vector<int> layers = { cols, 500, 1 };
    ann->setLayerSizes(layers);
    ann->setActivationFunction(ml::ANN_MLP::ActivationFunctions::SIGMOID_SYM, 1.0, 1.0);
    ann->setTrainMethod(ANN_MLP::TrainingMethods::BACKPROP);
    ann->setBackpropMomentumScale(0.1); 
    ann->setBackpropWeightScale(0.1); 
    ann->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 10000, 0.00001));
    ann->train(trainData);
}

This is how I predict the model

float train::predictANN(Mat hist)
{
    Mat results(1, 4, CV_32FC1);
    float pred = ann->predict(hist, results);//hist is a row matrix with one sample
    return pred;
}

I have tried to debug this code but have not fixed the error. Kindly help with why the prediction throws vector out of range exception. Thank you. NB:Am using different number of images per class during training. class 1 = 300 images, class 2 = 340 images etc

Predecting Predicting MLP with single sample

I have trained MLP as shown in the code below to classify images into 4 classes. My class labels are 1,2,3,4.This trains the model successfully but it thorws an Exception vector out of range during prediction

void train::trainANN(Mat hists, vector<int> labels)
{
    int cols = hists.cols;//size of input layer must be equal to this number of cols
    int rows = hists.rows;//used to determine rows in Mat of responses
    Mat_<float> responses = Mat(labels).reshape(0, rows);

    Ptr<TrainData> trainData = TrainData::create(hists, ROW_SAMPLE, responses);
    Ptr<ANN_MLP> ann = ml::ANN_MLP::create();
    vector<int> layers = { cols, 500, 1 };
    ann->setLayerSizes(layers);
    ann->setActivationFunction(ml::ANN_MLP::ActivationFunctions::SIGMOID_SYM, 1.0, 1.0);
    ann->setTrainMethod(ANN_MLP::TrainingMethods::BACKPROP);
    ann->setBackpropMomentumScale(0.1); 
    ann->setBackpropWeightScale(0.1); 
    ann->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 10000, 0.00001));
    ann->train(trainData);
}

This is how I predict the model

float train::predictANN(Mat hist)
{
    Mat results(1, 4, CV_32FC1);
    float pred = ann->predict(hist, results);//hist is a row matrix with one sample
    return pred;
}

I have tried to debug this code but have not fixed the error. Kindly help with why the prediction throws vector out of range exception. Thank you. NB:Am using different number of images per class during training. class 1 = 300 images, class 2 = 340 images etc

Predicting MLP with single sample

I have trained MLP as shown in the code below to classify images into 4 classes. My class labels are 1,2,3,4.This trains the model successfully but it thorws an Exception vector out of range during prediction

void train::trainANN(Mat hists, vector<int> labels)
{
    int cols = hists.cols;//size of input layer must be equal to this number of cols
    int rows = hists.rows;//used to determine rows in Mat of responses
    Mat_<float> responses = Mat(labels).reshape(0, rows);

    Ptr<TrainData> trainData = TrainData::create(hists, ROW_SAMPLE, responses);
    Ptr<ANN_MLP> ann = ml::ANN_MLP::create();
    vector<int> layers = { cols, 500, 1 };
    ann->setLayerSizes(layers);
    ann->setActivationFunction(ml::ANN_MLP::ActivationFunctions::SIGMOID_SYM, 1.0, 1.0);
    ann->setTrainMethod(ANN_MLP::TrainingMethods::BACKPROP);
    ann->setBackpropMomentumScale(0.1); 
    ann->setBackpropWeightScale(0.1); 
    ann->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 10000, 0.00001));
    ann->train(trainData);
}

This is how I predict the model

float train::predictANN(Mat hist)
hist)//hist is a row matrix(one sample)
{
    Mat results(1, 4, CV_32FC1);
    float pred = ann->predict(hist, results);//hist results);//This is a row matrix with one sample
the line that throws vector out of range exception
    return pred;
}

I have tried to debug this code but have not fixed the error. Kindly help with why the prediction throws vector out of range exception. Thank you. NB:Am using different number of images per class during training. class 1 = 300 images, class 2 = 340 images etc