首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opencv mlp不能使用tag CvANN_MLP::UPDATE_WEIGHTS

Opencv mlp不能使用tag CvANN_MLP::UPDATE_WEIGHTS
EN

Stack Overflow用户
提问于 2016-06-06 00:51:11
回答 1查看 402关注 0票数 2

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

但在CvANN_MLP::calc_output_scale中,代码崩溃并显示错误: OpenCV错误:其中一个参数的值超出范围(一些新的输出训练向量分量超出了原始范围

代码:

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

回答 1

Stack Overflow用户

发布于 2021-08-09 06:25:24

使用此方法

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

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

https://stackoverflow.com/questions/37644432

复制
相关文章

相似问题

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