OpenCV神经网络一次训练一次迭代

时间:2013-07-11 05:24:59

标签: c++ opencv

我知道在OpenCV中训练多层神经网络的唯一方法是:

CvANN_MLP network;
....
network.train(input, output, Mat(), Mat(), params, flags);

但这不会打印出任何有意义的调试(例如迭代计数,当前错误......),程序只会坐在那里直到完成训练,如果数据集是千兆字节则非常麻烦,我无法做到看到进展。

如何一次训练一次网络,或者在训练时打印出一些调试?

4 个答案:

答案 0 :(得分:1)

问题没有解决,但问题已经解决了。答:就当前的OpenCV版本而言,这是不可能的。

答案 1 :(得分:1)

您是否设置了UPDATE_WEIGHTS标志?

您可以通过让ANN预测训练集中每个样本的结果向量来自行测试错误。

答案 2 :(得分:0)

根据http://opencv.willowgarage.com/documentation/cpp/ml_neural_networks.html#cvann-mlp-train params参数的类型为cvANN_MLP_TrainParams。该类包含一个属性TermCriteria,它控制训练函数何时终止。可以将此终止标准类http://opencv.willowgarage.com/documentation/cpp/basic_structures.html设置为在给定次数的迭代之后或当满足给定的epsilon条件或两者的某种组合时终止。我自己没有使用过训练功能,所以我不知道你用来做这项工作的代码,但这样的事情会限制训练周期数

CvANN_MLP_TrainParams params = CvANN_MLP_TrainParams()

params.term_crit.type = 1;//This should tell the train function you want to terminate on number of iterations
params.term_crit.maxCount = 1;//Termination after one iteration might be max_iter instead of maxCount

network.train(input, output, Mat(),Mat(), params, flags)

就像我说的那样,我没有使用过openCV,但是看过这样的文档应该有用。

答案 3 :(得分:0)

您的答案位于源代码中。如果要在每x个纪元后获得一些输出,请在此循环中在源代码中添加一些内容: https://github.com/opencv/opencv/blob/9787ab598b6609a6ca6652a12441d741cb15f695/modules/ml/src/ann_mlp.cpp#L941

制作OpenCV时,他们必须在用户可自定义性与使用/阅读的简易性之间找到平衡。最终,您可以在编辑源代码时做任何想做的事情。