# Issue when training the ML model

**URL:** <https://forum.opencv.org/t/issue-when-training-the-ml-model/19824>\
**Category:** C++\
**Tags:** dnn, ml\
**Created:** [January 20, 2025, 5:38pm UTC](https://forum.opencv.org/t/issue-when-training-the-ml-model/19824 "2025-01-20T17:38:34Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tin\_Basic](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opencv.org/tin_basic/32/11846_2.png) [@Tin\_Basic](https://forum.opencv.org/u/Tin_Basic)\
**Post date:** [January 20, 2025, 5:38pm UTC](https://forum.opencv.org/t/issue-when-training-the-ml-model/19824/1 "2025-01-20T17:38:34Z")

</div>

Working on a model that recognizes handwritten digits from the MNIST dataset. Did my code in visual studio. After training the data i get Nan and inf in the output layer everytime.

```auto

    std::string fileNameImages = fileLocation;
    std::string fileNameLabels = fileLocation;

    std::vector<std::vector<unsigned char>> images = readImages(fileNameImages);
    std::vector<std::vector<unsigned char>> labels = readLabels(fileNameLabels);

    std::vector<cv::Mat> imagesData;
    std::vector<int> labelsData;

    for (auto i = 0u; i < 2; ++i)
    {
       
        cv::Mat m(28, 28, CV_8UC1, cv::Scalar(0));
        for (int row = 0; row < m.rows; ++row)
            for (int col = 0; col < m.cols; ++col)
                m.at<uchar>(row, col) = images[i][row * m.cols + col];
       
        
        imagesData.push_back(std::move(m));
        labelsData.push_back(labels[i].front());
    }

    cv::Ptr<cv::ml::ANN_MLP> mlp = cv::ml::ANN_MLP::create();

    mlp->setActivationFunction(cv::ml::ANN_MLP::SIGMOID_SYM, 1, 1);

    int inputLayerSize = imagesData[0].total();
    if (inputLayerSize > std::numeric_limits<int>::max()) {
        throw std::overflow_error("inputLayerSize exceeds the maximum value for int");
    }
    int hiddenLayerSize = 100;

    int outputLayerSize = 10;

    cv::Mat layers = (cv::Mat_<int>(3, 1)<<inputLayerSize, hiddenLayerSize, outputLayerSize);

    mlp->setLayerSizes(layers);

    int numSamples = imagesData.size();

    cv::Mat trainingData(numSamples, inputLayerSize, CV_32F);
    cv::Mat labelData(numSamples, outputLayerSize, CV_32F);

    for (int i = 0; i < numSamples; i++) {

        cv::Mat image = imagesData[i].reshape(1, 1);
        image.convertTo(trainingData.row(i), CV_32F);

        cv::Mat label = cv::Mat::zeros(1, outputLayerSize, CV_32F);
        label.at<float>(0, labelsData[i]) = 1.0;
        label.copyTo(labelData.row(i));

    }

    mlp->setTrainMethod(cv::ml::ANN_MLP::BACKPROP, 0.01, 0.1);

    cv::TermCriteria termCrit(cv::TermCriteria::MAX_ITER+cv::TermCriteria::EPS, 10, 0.01);
    mlp->setTermCriteria(termCrit);

    mlp->train(trainingData, cv::ml::ROW_SAMPLE, labelData);

```

Anybody has any ideas why this is happening?

---

<div class="post-metadata">

**Author:** ![Tin\_Basic](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.opencv.org/tin_basic/32/11846_2.png) [@Tin\_Basic](https://forum.opencv.org/u/Tin_Basic)\
**Post date:** [January 28, 2025, 5:57pm UTC](https://forum.opencv.org/t/issue-when-training-the-ml-model/19824/3 "2025-01-28T17:57:59Z")

</div>

Thx. The issue was with the model. I made a new model, changed the header file and also didn’t include the funtion SetTermCriteria.
