OpenCV 3.0 no puede cargar la red neuronal
Necesito usar una red neuronal en mi proyecto OpenCV (versión 3.0). He creado y entrenado la red neuronal y funciona, pero si quiero cargar la red neuronal desde un archivo YML, no predice.
Este es un código donde creo, entreno y guardo mi red neuronal:
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;
}
Pero la próxima vez, si quiero cargarlo desde el archivo YML:
Ptr<ANN_MLP> neural_network = Algorithm::load<ANN_MLP>("nn.yml", "neural_network");
Me sale la salida:
[-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");
Esta línea hace que me aparezca un error:
Error de OpenCV: error no especificado (el nodo no es un mapa ni una colección vacía) en cvGetFileNodeByName, archivo C: \ builds \ master_PackSlave-win64-vc12-shared \ op encv \ modules \ core \ src \ persistence.cpp, línea 739
¿Qué estoy haciendo mal? ¿Dónde está el problema?