1

私は OpenCV4Android を使用しており、算術平均を計算するためにニューラル ネットワークの小さな例を作成しようとしています。そこで、CvANN_MLPを使用してネットワークを作成することにしました。すべてうまくいきますが、トレーニングすると、次の例外で失敗します。

OpenCV エラー: CvANN_MLP::prepare_to_train の引数が正しくありません (出力トレーニング データは、トレーニング サンプルの数に等しい行数と最後の (出力) レイヤーのサイズに等しい列数を持つ浮動小数点行列である必要があります)

出力トレーニングを確認しましたが、そのタイプは CV_32FC1 です。また、行と列の数も正しいです。確かに、どこにエラーがあるかわかりません。

これは私のコードです。誰かが私を助けてくれることを願っています。ありがとう!

        int train_sample_count = 10;

        float td[][] = new float[10][3];

                    //I've created this method to populate td
        populateTrainingData(td);

        Mat trainData = new Mat(train_sample_count, 2, CvType.CV_32FC1);
        Mat trainClasses = new Mat(train_sample_count, 1, CvType.CV_32FC1);
        Mat sampleWts = new Mat(train_sample_count, 1, CvType.CV_32FC1);
        Mat neuralLayers = new Mat(3, 1, CvType.CV_32SC1);

        // input layer has 2 cells
        neuralLayers.put(0, 0, 2);
        // hidden layer has 2 cells
        neuralLayers.put(1, 0, 2);
        // output layer has 2 cells
        neuralLayers.put(2, 0, 2);

        // assembles the trainData,trainClasses and weights

        for (int i = 0; i < train_sample_count; i++) {
            trainData.put(i, 0, td[i][0]);
            trainData.put(i, 1, td[i][1]);
            trainClasses.put(i, 0, td[i][2]);
            sampleWts.put(i, 0, 1);
        }

        Log.d(DEBUG_TAG, "Assemblage is finished");

        // creates neural network with the layers of neuralLayers
        CvANN_MLP machineBrain = new CvANN_MLP(neuralLayers);

        Log.d(DEBUG_TAG, "Neural network is created");

        // trains neural network with my data
        // parameters for neural network
        CvANN_MLP_TrainParams trainParams = new CvANN_MLP_TrainParams();
        // backward propagation
        trainParams.set_train_method(CvANN_MLP_TrainParams.BACKPROP);
        // number of iterations and sigmoidal update
        TermCriteria termC = new TermCriteria(TermCriteria.EPS
                + TermCriteria.COUNT, 10000, 1.0);
        trainParams.set_term_crit(termC);

        // optional value which is zero
        Mat simpleIndex = new Mat();
        // setting up the neural network
        Log.d(DEBUG_TAG, "Setting up is finished");
        Log.d(DEBUG_TAG, "Type of trainClasses: "
                + (trainClasses.type() == CvType.CV_32FC1));
        machineBrain.train(trainData, trainClasses, sampleWts);
4

0 に答える 0