【问题标题】:Opencv mlp is not working with tag CvANN_MLP::UPDATE_WEIGHTSOpencv mlp 不适用于标签 CvANN_MLP::UPDATE_WEIGHTS
【发布时间】:2016-10-05 07:03:31
【问题描述】:

我是使用 Opencv 的新手,尤其是多层感知器 (mlp)。我想多次训练网络。因此,我使用标签 CvANN_MLP::UPDATE_WEIGHTS。因为我不希望我的输入和输出被标准化,所以我使用标签 CvANN_MLP::NO_INPUT_SCALE + CvANN_MLP::NO_OUTPUT_SCALE。

但代码因错误而崩溃:OpenCV 错误:CvANN_MLP::calc_output_scale

代码中的参数之一超出范围(一些新的输出训练向量组件运行超出原始范围太多)

代码:

//creation of the multilayer perceptron
Mat layers = cv::Mat(3, 1, CV_32SC1);
layers.row(0) = Scalar(1);
layers.row(1) = Scalar(2);
layers.row(2) = Scalar(1);

CvANN_MLP mlp;
mlp.create(layers, CvANN_MLP::SIGMOID_SYM, 1, 1);

//the training inputs and outputs
Mat trainingData(2, 1, CV_32FC1);
Mat trainingClasses(2, 1, CV_32FC1);

trainingData.at<float>(Point(0, 0)) = 1;
trainingData.at<float>(Point(0, 1)) = -1;

trainingClasses.at<float>(Point(0, 0)) = 1;
trainingClasses.at<float>(Point(0, 1)) = -1;

//the training params
CvANN_MLP_TrainParams params;
CvTermCriteria criteria;
criteria.max_iter = 1;
criteria.epsilon = 0.00001f;
criteria.type = CV_TERMCRIT_ITER | CV_TERMCRIT_EPS;
params.train_method = CvANN_MLP_TrainParams::BACKPROP;
params.bp_dw_scale = 1.0f;
params.bp_moment_scale = 1.0f;
params.term_crit = criteria;

//seems like whe have to do that in order to initialize the weights
mlp.train(trainingData, trainingClasses, Mat(), Mat(), params, CvANN_MLP::NO_INPUT_SCALE + CvANN_MLP::NO_OUTPUT_SCALE);

for (int i(0); i < 10; i++)
{
    //this is the point where it crashes
    mlp.train(trainingData, trainingClasses, Mat(), Mat(), params, CvANN_MLP::UPDATE_WEIGHTS + CvANN_MLP::NO_INPUT_SCALE + CvANN_MLP::NO_OUTPUT_SCALE);

    for (int j(0); j < trainingData.rows; j++)
    {
        Mat input = trainingData.row(j);
        Mat output(1, 1, CV_32FC1);

        mlp.predict(input, output);

        cout << output.at<float>(0, 0) << " ";
    }
    cout << endl;
}

【问题讨论】:

  • 你找到他的解决方案了吗?我知道那是 2 年前的事了,但我遇到了同样的问题。

标签: c++ opencv neural-network


【解决方案1】:

使用这种方法

Ptr<:ml::traindata> train_data = cv::ml::TrainData::create(trainData, ml::ROW_SAMPLE, trainLabels);

【讨论】:

  • 请解释此答案与(并回答)问题的关系。 trainDatatrainLabels 未定义(无论是在问题中还是在您的答案中),并且完全不清楚 OP 的代码(如果有的话)这个 sn-p 应该去哪里,也不清楚这如何解决 OP 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 2020-05-25
  • 2019-01-30
相关资源
最近更新 更多