【发布时间】:2016-04-05 11:35:48
【问题描述】:
我需要在我的 OpenCV(3.0 版)项目中使用神经网络。我已经创建并训练了神经网络并且它可以工作,但是如果我想从 YML 文件加载神经网络,它不会预测。
这是我创建、训练和保存我的神经网络的代码:
FileStorage fs("nn.yml", FileStorage::WRITE);
int input_neurons = 7;
int hidden_neurons = 100;
int output_neurons = 5;
Ptr<TrainData> train_data = TrainData::loadFromCSV("data.csv", 10, 7, 12);
Ptr<ANN_MLP> neural_network = ANN_MLP::create();
neural_network->setTrainMethod(ANN_MLP::BACKPROP);
neural_network->setBackpropMomentumScale(0.1);
neural_network->setBackpropWeightScale(0.05);
neural_network->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, (int)10000, 1e-6));
Mat layers = Mat(3, 1, CV_32SC1);
layers.row(0) = Scalar(input_neurons);
layers.row(1) = Scalar(hidden_neurons);
layers.row(2) = Scalar(output_neurons);
neural_network->setLayerSizes(layers);
neural_network->setActivationFunction(ANN_MLP::SIGMOID_SYM, 1, 1);
neural_network->train(train_data);
if (neural_network->isTrained()) {
neural_network->write(fs);
cout << "It's OK!" << endl;
}
但是下一次,如果我想从 YML 文件中加载它:
Ptr<ANN_MLP> neural_network = Algorithm::load<ANN_MLP>("nn.yml", "neural_network");
我得到输出:
[-1.#IND, -1.#IND, -1.#IND, -1.#IND, -1.#IND]
[-1.#IND, 1.0263158, 1.0263158, 1.0263158, 1.0263158]
[1.0263158, 1.0263158, 1.0263158, 1.0263158, 1.0263158]
[-1.#IND, -1.#IND, -1.#IND, -1.#IND, -1.#IND]
Ptr<ANN_MLP> neural_network = Algorithm::load<ANN_MLP>("nn.yml");
这行导致我收到错误:
OpenCV 错误:未指定错误(节点既不是地图也不是空集合 on) 在 cvGetFileNodeByName,文件 C:\builds\master_PackSlave-win64-vc12-shared\op encv\modules\core\src\persistence.cpp,第 739 行
我做错了什么?问题出在哪里?
【问题讨论】:
-
Algorithm::load 是否需要与神经网络->写入格式相同的数据?
标签: c++ opencv neural-network opencv3.0 vision