最近剛轉用opencv3,使用ANN算法時遇到了一些問題,記錄下來。
訓練神經網絡的代碼如下:
//創建ANN Ptr<ANN_MLP> bp = ANN_MLP::create();
設置層數時,要注意:例子的數量要和標簽的數量相同
第一項為圖片的像素數,最后一項為訓練的種類數
//設置層數 Mat layerSizes = (Mat_<int>(1, 4) << image_rows*image_cols, int(image_rows*image_cols / 2), int(image_rows*image_cols / 2), class_num); bp->setLayerSizes(layerSizes);
bp->setActivationFunction(ANN_MLP::SIGMOID_SYM, 1, 1); void setActivationFunction(int _activ_func, double _f_param1, double _f_param2 ); bp->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 300, FLT_EPSILON)); bp->setTrainMethod(ANN_MLP::BACKPROP, 0.001); Ptr<TrainData> tData = TrainData::create(DataMat, ROW_SAMPLE, labelsMat); bp->train(tData); float response = ann->predict(testMat);
//加載分類器時,使用以下任意一個即可 Ptr<ANN_MLP> bp = StatModel::load<ANN_MLP>("*.xml"); Ptr<ANN_MLP> bp = ANN_MLP::load<ANN_MLP>("*.xml"); Ptr<ANN_MLP> bp = Algorithm::load<ANN_MLP>("*.xml");
不知道為什么,我使用opencv3的ANN算法 跟opencv2中的算法識別結果差距很大(2識別結果大致正確,3識別結果完全不對),參數完全相同時結果差距也很大,不知道要怎樣解決。