私は 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);