簡體   English   中英

ANN OPENCV錯誤聲明失敗

[英]ANN OPENCV error assertion failed

我正在嘗試在QT中使用opencv創建一個簡單的ANN網絡,並在以后進行更多開發,我嘗試了簡單的數據,但出現一條錯誤消息: OpenCV Error : asserion failed ((unsigned)(i1 *datatype<_tp>::channels)) < unsigned(size.p[1]* channels())) in cv::mat::at

這是我寫的代碼

#include <iostream>
#include <opencv2/ml.hpp>
#include <opencv/cv.h>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "nnet.h"
using namespace std;
using namespace cv;


int main()
{
string filename="data.csv";
Ptr<cv::ml::TrainData> tdata =     cv::ml::TrainData::loadFromCSV(filename,0,-1,-1);

Mat trainData = tdata->getTrainSamples();
Mat trainLabels = tdata->getTrainResponses();
int numClasses = 3;

Mat hot(trainLabels.rows, numClasses, CV_32F, 0.0f);

for (int i=0; i<trainLabels.rows; i++) {
        int id = (int)trainLabels.at<float>(i);
        hot.at<float>(i, id) = 1.0f;
}

    int input_neurons = 5;
    int hidden_neurons = 5;
    int output_neurons = 3;

    Mat layerSizes = Mat(3, 1, CV_32SC1);
    layerSizes.row(0) = Scalar(input_neurons);
    layerSizes.row(1) = Scalar(hidden_neurons);
    layerSizes.row(2) = Scalar(output_neurons);

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

    myNetwork->setLayerSizes(layerSizes);
    myNetwork->setTrainMethod(ml::ANN_MLP::SIGMOID_SYM);
    myNetwork->setTermCriteria(TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 1000, 0.00001f));
    myNetwork->setTrainMethod(ml::ANN_MLP::BACKPROP,0.1f,0.1f);
    myNetwork->setActivationFunction(ml::ANN_MLP::SIGMOID_SYM, 1, 1);

    myNetwork->train(trainData, 0, hot);

    string testfilename="test-data.csv";

    Ptr<cv::ml::TrainData> testdata = cv::ml::TrainData::loadFromCSV(testfilename, 0,0,-1);

        Mat testData = testdata->getTrainSamples();
        Mat testLabels = testdata->getTrainResponses();
        Mat testResults;

        myNetwork->predict(testData, testResults);
        float accuracy = float(countNonZero(testResults == testLabels)) / testLabels.rows;
        printf("%f",accuracy);

return 0;
}

對於我的數據集

data.csv包含

1,2,3,7,2
7,1,7,7,5
9,7,5,3,2
12,21,32,71,8

和data-test.csv包含:

1,2,1,1,2,
9,1,2,12,5,
11,28,14,50,8,
3,1,2,12,5,
11,28,24,20,8,

預先感謝您的幫助。

我找到了解決問題的方法,在csv文件中,我有3個類,響應值應該在[0..2]之間,並且我給出了5和8的隨機數,因此更改它們可以解決此問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM