OpenCV のニューラル ネットワークを使用しようとしています。
ANN::ANN() {
// 4 rows and 1 col with the type of 32 bits short.
CvMat* neural_layers = cvCreateMat(4, 1, CV_32SC1);
cvSet1D(neural_layers, 0, cvScalar(2)); // inputs
cvSet1D(neural_layers, 1, cvScalar(30)); // hidden
cvSet1D(neural_layers, 2, cvScalar(30)); // hidden
cvSet1D(neural_layers, 3, cvScalar(1)); //output
// Init ANN with sigmoid function.
this->network = new CvANN_MLP(neural_layers,
CvANN_MLP::SIGMOID_SYM, // active function
1, // alpha = 1
1); // beta = 1
}
トレーニング パラメータ:
void ANN::train() {
// Prepare for sample matrix.
CvANN_MLP_TrainParams params = CvANN_MLP_TrainParams();
// cvTermCriteria( CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 1000, 0.01 );
params.train_method = CvANN_MLP_TrainParams::BACKPROP;
params.bp_dw_scale = 0.01;
params.bp_moment_scale = 0.05;
// Terminate condition.
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,
100000, //
0.1);
// Start to train the network.
this->network->train(
this->inputs,
this->outputs,
this->weights,
0, // Samples start index.
params, // Traning parameters.
1 // UPDATE_WEIGHTS
);
}
しかし、隠しレイヤーのサイズを 3 から 30 に変更したため、まったく機能していないようで、結果はまったく変わりません。
次に、アルファとベータの値を変更しましたが、それも何も変わりません。
私のコードで何が問題になっていますか?
==== 私のトレーニングとテストのサンプル: ====
y = cos(x) + sin(x)
-0.758732841028 41.0938207976 27.2367595423
1.15370020129 21.1456884544 38.852465807
0.298333522748 37.4369795032 51.2449385711
1.8800004748 96.2375790658 44.2418473915
-1.78419644641 80.3189155018 77.9060673705
...