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



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

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

但这不会打印出任何有意义的调试(例如迭代次数、当前错误等),程序将一直坐在那里直到完成训练,如果数据集以GB为单位,那就很麻烦了,我看不到进度。

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

问题未解决,但问题已解决。答:就目前的OpenCV版本而言,这是不可能的。

是否设置了UPDATE_WEIGHT标志?

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

根据http://opencv.willowgarage.com/documentation/cpp/ml_neural_networks.html#cvann-mlp列车params参数的类型为cvANN_MLP_TrainParams。此类包含一个属性TermCriteria,用于控制训练函数何时终止。此终止标准类别http://opencv.willowgarage.com/documentation/cpp/basic_structures.html可以设置为在给定次数的迭代之后或者当满足给定ε条件或者两者的某种组合时终止。我自己没有使用过训练函数,所以我不知道你会用什么代码来实现这一点,但这样的东西应该会限制的训练周期数

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,但读过文档后,这样的东西应该会起作用。

您的答案在于源代码。如果你想在每x个时期后得到一些输出,那么在源代码中放入一些东西,在这个循环中:https://github.com/opencv/opencv/blob/9787ab598b6609a6ca6652a12441d741cb15f695/modules/ml/src/ann_mlp.cpp#L941

当他们制作OpenCV时,他们必须在用户可定制性和使用/阅读的容易程度之间找到平衡。最终,在编辑源代码时,您可以随心所欲。

最新更新