尝试从xml文件训练CvANN_MLP ann时出现意外的内存错误

unexpected memory error when trying to train CvANN_MLP ann from xml file

本文关键字:ann 意外 错误 内存 MLP xml 文件 CvANN      更新时间:2023-10-16

我正试图从输入图像到我的代码分类数字我创建了一个OCR_3。xlm文件,我认为没有问题,但是当我尝试训练CvANN_MLP时,我得到了一个错误,上面写着:

OpenCV Error: Assertion failed (y==0 || (data &&>= 1 &&(无符号)y & lt;(unsigned)size.p[0])) in cv::Mat::ptr, file D:opencvbuildincludeopencv2coreMat.hpp, line 429

下面是我的代码:
int main(int argc, char** argv)

{

FileStorage fs;
fs.open("OCR_3.xml", FileStorage::READ);
Mat trainData;
Mat classes;
fs["TrainingData"] >> trainData;
fs["classes"] >> classes;
int const nlayers = 10;
CvANN_MLP ann;
int const numCharacters = 9;
int buffer[] = { trainData.cols, nlayers, numCharacters };
Mat const layers(1, 3, CV_32SC1, buffer);
ann.create(layers, CvANN_MLP::SIGMOID_SYM, 1, 1);
Mat trainClasses(trainData.rows, numCharacters, CV_32FC1);
for (int i = 0; i != trainClasses.rows; ++i){
    int const labels = *classes.ptr<int>(i);
    auto train_ptr = trainClasses.ptr<float>(i);
    for (int k = 0; k != trainClasses.cols; ++k){
        *train_ptr = k != labels ? 0 : 1;
        ++train_ptr;
    }
}
Mat const weights = cv::Mat::ones(1, trainData.rows, CV_32FC1);
ann.train(trainData, trainClasses, weights);

return 0;

}

我一直在做这个大约3个月,我真的不知道问题是什么,你能帮我通过这个,也许有问题在。xml文件

你可以从这个网址下载我的ocr_3.xml文件:
https://www.dropbox.com/s/g32cm20f13hffpu/OCR_3.xml?dl=0

阅读本教程,了解如何准备数据文件https://github.com/bytefish/opencv/blob/master/machinelearning/doc/machinelearning.pdf

注意:最新版本的OpenCv - 3.0 -机器学习模块重写因此,在做出正确的数据文件代码后,必须适应新版本

http://docs.opencv.org/master/db/dfa/tutorial_transition_guide.html