我对MLP上的标签有疑问,首先我认为它与SVM标签相同,但在尝试下面的代码之后:
Mat labels(numSamples, 3 , CV_32FC1, Scalar(3,0));
labels.rowRange(0, numcar - 1) = Scalar (1.0);
labels.rowRange(numcar, numcar + numbus - 1) = Scalar (2.0);
labels.rowRange(numcar + numbus, numSamples) = Scalar (3.0);
即使我不得不用另一个图像替换图像,也要确定相同值的预测。在我搜索之后,事实证明存在差异。标签必须使用矢量,我不知道如何使用矢量标记它,因为我在这种情况下是新手。 以下是培训代码
Mat layers = Mat(4, 1 ,CV_32SC1);
int sz = data.cols;
layers.row(0) = Scalar(sz);
layers.row(1) = Scalar(10);
layers.row(2) = Scalar(10);
layers.row(3) = Scalar(3);
CvANN_MLP mlp;
CvANN_MLP_TrainParams params;
CvTermCriteria criteria;
criteria.max_iter = 1000;
criteria.epsilon = 0.0001;
criteria.type = CV_TERMCRIT_ITER | CV_TERMCRIT_EPS;
params.train_method = CvANN_MLP_TrainParams::BACKPROP;
params.bp_dw_scale = 0.5f;
params.bp_moment_scale = 0.5f;
params.term_crit = criteria;
mlp.create(layers, CvANN_MLP::SIGMOID_SYM);
mlp.train(data , labels ,Mat(),Mat(),params);
和预测
Mat response(1, 3, cv_32FC1);
mlp.predict (sample, response);
cout << response << endl;
我在这里想要标记汽车,公共汽车和卡车。 帮我解决这个问题,谢谢关注