我知道在 OpenCV 中训练多层神经网络的唯一方法是:
CvANN_MLP network;
....
network.train(input, output, Mat(), Mat(), params, flags);
但这不会打印出任何有意义的调试(例如迭代计数,当前错误,......),程序只会坐在那里直到它完成训练,如果数据集以千兆字节为单位非常麻烦,我无法看到进度.
如何一次训练网络一次迭代,或者在训练时打印一些调试信息?
问题没有解决,但问题解决了。答:就当前的 OpenCV 版本而言,这是不可能的。
您是否设置了 UPDATE_WEIGHTS 标志?
您可以通过让 ANN 预测训练集中每个样本的结果向量来自己测试错误。
根据http://opencv.willowgarage.com/documentation/cpp/ml_neural_networks.html#cvann-mlp-train 参数是 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,但是阅读了类似这样的文档应该可以工作。
您的答案在源代码中。如果您想在每 x 个时期后获得一些输出,请在源代码中添加一些内容,在此循环中: https ://github.com/opencv/opencv/blob/9787ab598b6609a6ca6652a12441d741cb15f695/modules/ml/src/ann_mlp.cpp#L941
当他们制作 OpenCV 时,他们必须在用户可定制性和使用/阅读的难易程度之间找到平衡点。最终,您可以在编辑源代码时为所欲为。