首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV 3/神经网络/预测中的错误/ Ptr< ANN_MLP >/ C++

OpenCV 3/神经网络/预测中的错误/ Ptr< ANN_MLP >/ C++
EN

Stack Overflow用户
提问于 2015-09-15 05:34:45
回答 2查看 3.2K关注 0票数 1

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

其中,trainData和trainLabels声明为:

代码语言:javascript
复制
Mat trainData(15, 4, CV_32FC1); //15 examples with 4 features each
Mat trainLabels(15, 1, CV_32FC1);

trainData:

代码语言:javascript
复制
[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]

trainLabels:

代码语言:javascript
复制
[0;
 0;
 0;
 0;
 0;
 0;
 1;
 0;
 0;
 0;
 1;
 0;
 1;
 0;
 0]

神经网络代码编译并运行,没有错误,直到预测。下面是截图:

代码语言:javascript
复制
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);

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

代码语言:javascript
复制
nn->predict(trainData.row(1));

这里的问题是什么,我如何解决它?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-09-18 00:16:33

对于Python语言中的引用,我使用: trainData.getTestResponses(),,其中trainData是输入数据的整个结构。

我希望这个helps...OpenCV 3的新结构一开始会让我感到困惑,但我很欣赏现在做事情的方法。

票数 0
EN

Stack Overflow用户

发布于 2016-11-21 19:59:12

尝试切换setActivationFunction()setLayerSize()函数的顺序。您应该在调用setAtctivationFunction()之前调用setLayerSize()。这就是我的解决方案(OpenCV 3.1)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32574316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档