[C:\fakepath\csv file.png]
(/upfiles/1483124022567734.png)[C:\fakepath\error.png](/upfiles/14831189428760695.png)
[C:\fakepath\error.png](/upfiles/14831140235882506.png) this related to the previous question i had asked:
http://answers.opencv.org/question/120541/how-do-i-load-and-use-traindata/
i am trying to build digit recognition project using ANN_MLP open cv 3.0 and the code is as follows:
[C:\fakepath\csv file.png](/upfiles/14831240972030755.png)
void main()
{
int inputLayerSize = 1;
int outputLayerSize = 1;
int numSamples = 2;
Mat layers = Mat(3, 1, CV_32S);
layers.row(0) =Scalar(35591) ;
layers.row(1) = Scalar(100);
layers.row(2) = Scalar(10);
vector layerSizes;
layerSizes[0]=35591;
layerSizes[1]=1000;
layerSizes[2]=10;
Ptr nnPtr =ANN_MLP::create();
//nnPtr->setLayerSizes(3);
nnPtr->setLayerSizes(layers);
nnPtr->setTrainMethod(ANN_MLP::BACKPROP);
nnPtr->setTermCriteria(TermCriteria(cv::TermCriteria::COUNT | cv::TermCriteria::EPS, 1000, 0.00001f));
nnPtr->setActivationFunction(ANN_MLP::SIGMOID_SYM, 1, 1);
nnPtr->setBackpropWeightScale(0.5f);
nnPtr->setBackpropMomentumScale(0.5f);
Ptr tdata = TrainData::loadFromCSV("C:/Users/Shreya Srivastava/Desktop/train.csv",
0, // lines to skip
0, // 1st elem is the label
-1); // only 1 response per line
Mat trainData = tdata->getTrainSamples();
Mat trainLabels = tdata->getTrainResponses();
int numClasses = 10; // assuming mnist
Mat hot(trainLabels.rows, numClasses, CV_32F, 0.0f); // all zero, initially
for (int i=0; i(i);
hot.at(i, id) = 1.0f;
}
nnPtr->train(trainData,0,hot);
bool m = nnPtr->isTrained();
if (m)
std::cout << "training complete\n\n";
Ptr mdata = TrainData::loadFromCSV("C:/Users/Shreya Srivastava/Desktop/test.csv", 0,0,-1);
Mat testData = mdata->getTrainSamples();
Mat testLabels = mdata->getTrainResponses();
Mat testResults;
nnPtr->predict(testData, testResults);
float accuracy = float(countNonZero(testResults == testLabels)) / testLabels.rows;
printf("the accuracy is %f",accuracy);
}
i dont understand why i am getting assertion failed error
↧