将神经网络与 opencv 3.1.0 结合使用

Using Neural Network with opencv 3.1.0

本文关键字:结合 神经网络 opencv      更新时间:2023-10-16

我正在尝试使用 OpenCV 3.1.0 实现神经网络。预测时,我得到一个值为 -1.#QNAN 的向量。我做错了什么?

// train
Ptr<ANN_MLP> ann = ml::ANN_MLP::create();
Mat layers(1, 3, CV_32F);
layers.at<float>(0) = features.cols;
layers.at<float>(1) = nlayers;
layers.at<float>(2) = numLabels;
ann->setActivationFunction(ANN_MLP::SIGMOID_SYM);
ann->setLayerSizes(layers);
Mat trainClasses;
trainClasses.create(features.rows, numLabels, CV_32F);
for (int i = 0; i < trainClasses.rows; i++)
{
    for (int k = 0; k < trainClasses.cols; k++)
    {
        if (k == labels[i])
            trainClasses.at<float>(i, k) = 1;
        else
            trainClasses.at<float>(i, k) = 0;
    }
}
Mat weights(1, features.rows, CV_32F, Scalar::all(1));
Ptr<TrainData> tdata = TrainData::create(features, ROW_SAMPLE,
trainClasses, Mat(), Mat(), weights, Mat());
ann->train(tdata);
// predict
Mat output(1, numLabels, CV_32F);
ann->predict(test_data, output);
我是

神经网络的新手,但我想你的输入层应该有等于整体属性大小的神经元。

假设您有 5 张 10*10 大小的图像用于训练,那么您应该为每个像素提供输入神经元。也就是说,5*10*10 = 500。