神经网络对测试样本给出相同的结果
neural network gives the same results for test samples
我用CvANN_MLP类创建了一个神经网络,在2.4.6版本中使用Opencv库。我的Cv_ANN mlp网络是:
Mat trainingData(NUMERO_ESEMPI_TOTALE, 59, CV_32FC1);
Mat trainingClasses(NUMERO_ESEMPI_TOTALE, 1, CV_32FC1);
for(int i=0;i<NUMERO_ESEMPI_TOTALE;i++){
for(int j=0;j<59;j++){
trainingData.at<float>(i,j) = featureVect[i][j];
}
}
for(int i=0;i<NUMERO_ESEMPI_TOTALE;i++){
trainingClasses.at<float>(i,0) = featureVect[i][59];
}
Mat testData (NUMERO_ESEMPI_TEST , 59, CV_32FC1);
Mat testClasses (NUMERO_ESEMPI_TEST , 1, CV_32FC1);
for(int i=0;i<NUMERO_ESEMPI_TEST;i++){
for(int j=0;j<59;j++){
testData.at<float>(i,j) = featureVectTest[i][j];
}
}
//0 bocca, 1 non bocca.
testClasses.at<float>(0,0) = 1;
testClasses.at<float>(1,0) = 0;
testClasses.at<float>(2,0) = 1;
testClasses.at<float>(3,0) = 1;
testClasses.at<float>(4,0) = 0;
testClasses.at<float>(5,0) = 1;
testClasses.at<float>(6,0) = 0;
testClasses.at<float>(7,0) = 1;
testClasses.at<float>(8,0) = 1;
testClasses.at<float>(9,0) = 0;
testClasses.at<float>(10,0) = 0;
testClasses.at<float>(11,0) = 1;
testClasses.at<float>(12,0) = 0;
testClasses.at<float>(13,0) = 0;
testClasses.at<float>(14,0) = 0;
testClasses.at<float>(15,0) = 0;
testClasses.at<float>(16,0) = 0;
testClasses.at<float>(17,0) = 0;
testClasses.at<float>(18,0) = 0;
testClasses.at<float>(19,0) = 1;
testClasses.at<float>(20,0) = 1;
testClasses.at<float>(21,0) = 0;
testClasses.at<float>(22,0) = 1;
testClasses.at<float>(23,0) = 0;
testClasses.at<float>(24,0) = 1;
testClasses.at<float>(25,0) = 0;
testClasses.at<float>(26,0) = 0;
testClasses.at<float>(27,0) = 1;
testClasses.at<float>(28,0) = 1;
testClasses.at<float>(29,0) = 1;
Mat layers = Mat(3, 1, CV_32SC1);
layers.row(0) = Scalar(59);
layers.row(1) = Scalar(3);
layers.row(2) = Scalar(1);
CvANN_MLP mlp;
CvANN_MLP_TrainParams params;
CvTermCriteria criteria;
criteria.max_iter = 100;
criteria.epsilon = 0.0000001;
criteria.type = CV_TERMCRIT_ITER | CV_TERMCRIT_EPS;
params.train_method = CvANN_MLP_TrainParams :: BACKPROP;
params.bp_dw_scale = 0.05 ;
params.bp_moment_scale = 0.05 ;
params.term_crit = criteria ;
mlp.create(layers);
// train
mlp.train(trainingData,trainingClasses,Mat(),Mat(),params);
Mat response(1, 1, CV_32FC1);
Mat predicted(testClasses.rows, 1, CV_32F);
Mat pred(NUMERO_ESEMPI_TEST, 1, CV_32FC1);
Mat pred1(NUMERO_ESEMPI_TEST, 1, CV_32FC1);
for(int i = 0; i < testData . rows ; i++){
Mat response(1, 1, CV_32FC1);
Mat sample = testData.row(i);
mlp.predict(sample,response);
predicted.at<float>(i ,0) = response.at <float>(0,0);
pred.at<float>(i,0)=predicted.at<float>(i ,0);
pred1.at<float>(i,0)=predicted.at<float>(i ,0);
file<<"Value Image "<<i<<": "<<predicted.at<float>(i ,0)<<"n";
//cout<<"Value Image "<<i<<": "<<predicted.at<float>(i ,0)<<endl;
}
问题是这个网络为每个测试样本返回相同的结果。我不知道为什么。我的网络将一组具有 59 个输入值和 1 个输出值的特征向量作为输入。你能帮我吗?
我也有类似的问题。由于 mlp 的创建函数的默认参数,出现问题。它不能成功创建 sigmoid 函数,并且它无法在那种条件下进行训练,你会得到相同的结果。所以解决方案是使用这样的创建函数:
mlp.create(layers, CvANN_MLP::SIGMOID_SYM, 1, 1)
我的问题是在这里:OpenCV神经网络Sigmoid输出
相关文章:
- 二叉树基准测试结果
- 谷歌基准测试结果中显示的时间没有意义
- 谷歌测试:如何返回成功结果?
- 输出结果时如何将参数化测试合并为一个
- Google Mock - 使用 CoTaskMemFree 时,测试返回没有结果
- 泄漏测试代码shared_ptr奇怪的结果
- 测试结果乘加减除法可能为一组数字
- 在单元测试(Nunit或MSTest)中从C#中调用的C 函数的原因是从控制台应用程序中运行的同一代码的不同结果
- 缓存错过压力测试:令人惊叹的结果.任何解释
- 如何将单位测试标记为在Netbeans测试结果窗口中跳过的?(C )
- 单位测试多个C 项目和团队的出口结果
- 对同一变量的测试结果似乎不同
- boost::regex_match给出的结果与许多在线雷格斯测试器不同
- 神经网络对测试样本给出相同的结果
- 对多线程输入的QTableWidget进行基准测试,结果很奇怪
- 如何在使用单个测试项目时将所有QtTestLib单元测试的结果组合在一个文件中?
- 奇怪的基准测试结果
- if/else优化测试结果令人震惊
- 了解boost::随机统计测试的结果
- 如何在boost中以编程方式获得测试结果