c++ - OpenCV 3/神经网络/预测错误/Ptr< ANN_MLP >/C++

标签 c++ opencv neural-network opencv3.0

我正在尝试在 OpenCV 3.0.0 版中实现一个简单的神经网络示例。根据latest reference .为了简单起见,我使用了来自 iris data set 的随机 15 个示例。为了训练。我还将输出种类减少到 2,只是为了让事情变得更简单。

其中 trainData 和 trainLabels 声明为:

Mat trainData(15, 4, CV_32FC1); //15 examples with 4 features each
Mat trainLabels(15, 1, CV_32FC1);

训练数据:

[5.5, 3.5, 1.3, 0.2;
 6.5, 2.8, 4.5999999, 1.5;
 6.3000002, 2.3, 4.4000001, 1.3;
 6, 2.2, 4, 1;
 4.5999999, 3.0999999, 1.5, 0.2;
 5, 3.2, 1.2, 0.2;
 7.4000001, 2.8, 6.0999999, 1.9;
 6, 2.9000001, 4.5, 1.5;
 5, 3.4000001, 1.5, 0.2;
 6.4000001, 2.9000001, 4.3000002, 1.3;
 7.1999998, 3.5999999, 6.0999999, 2.5;
 5.0999999, 3.3, 1.7, 0.5;
 7.1999998, 3, 5.8000002, 1.6;
 6.0999999, 2.8, 4, 1.3;
 5.8000002, 2.7, 4.0999999, 1]

火车标签:

[0;
 0;
 0;
 0;
 0;
 0;
 1;
 0;
 0;
 0;
 1;
 0;
 1;
 0;
 0]

神经网络代码编译和运行没有错误达到预测。这是片段:

Ptr< ANN_MLP >  nn = ANN_MLP::create();
nn->setActivationFunction(cv::ml::ANN_MLP::SIGMOID_SYM);
nn->setTrainMethod(cv::ml::ANN_MLP::BACKPROP);
nn->setBackpropMomentumScale(0.1);
nn->setBackpropWeightScale(0.1);
nn->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, (int)100000, 1e-6));

//setting the NN layer size
cv :: Mat layers = cv :: Mat (4 , 1 , CV_32SC1 );
layers . row (0) = cv :: Scalar (4) ;
layers . row (1) = cv :: Scalar (4) ;
layers . row (2) = cv :: Scalar (4) ;
layers . row (3) = cv :: Scalar (1) ;
nn->setLayerSizes(layers);
nn->train(trainData, ROW_SAMPLE, trainLabels);

但是每当我尝试“预测”时,我都会收到“段错误(核心转储)”错误:

nn->predict(trainData.row(1));

这里有什么问题,我该如何解决?谢谢。

最佳答案

为了在 Python 中引用,我使用:trainData.getTestResponses(),其中 trainData 是输入数据的整个结构。

我希望这会有所帮助...OpenCV 3 的新结构起初让我感到困惑,但我很欣赏现在完成工作的方法。

关于c++ - OpenCV 3/神经网络/预测错误/Ptr< ANN_MLP >/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574316/

相关文章:

c++ - 这个递归函数什么时候出现for循环递增?

c++ - c++ 中是否有使用 opencv 和 travis ci 的示例项目?

python - Tensorflow LSTM RNN 输出激活函数

python - Tensorflow 中的数据增强是如何实现的?

c++ - 编写接受 cv::Mat 或 cv::UMat 类型输入的模板函数

python - 您可以反转 PyTorch 神经网络并激活输出的输入吗?

c++ - 多态性和方法重载在 C++ 中几乎是一回事吗

c++ - C++ 中的矩阵类

c++ - 如何为顶点数组中的纹理设置动画?

android - 无法找到额外的模块OpenCV android studio(ximgproc)