在OpenCV docs here
中提到了它人工神经网络 - 多层感知器。
与ML中构建和训练的许多其他模型不同 曾经,在MLP模型中,这些步骤是分开的。首先是网络 使用非默认值创建指定拓扑 构造函数或方法ANN_MLP :: create。 设置所有权重 为零。然后,使用一组输入和训练网络 输出向量。训练程序可以重复多次, 也就是说,可以根据新的训练数据调整权重。
还提到了:
UPDATE_WEIGHTS
更新网络权重,而不是从头开始计算。 在后一种情况下,使用Nguyen-Widrow算法初始化权重。
所以我想知道当我去训练模型时,重量初始化会发生什么。与OpenCV 3.3.1相关的答案也很受欢迎
答案 0 :(得分:4)
你有理由怀疑文件吗? OpenCV是开源库,因此您可以自己查看下面的内容here
ANN_MLPImpl()
{
clear();
setActivationFunction( SIGMOID_SYM, 0, 0);
setLayerSizes(Mat());
setTrainMethod(ANN_MLP::RPROP, 0.1, FLT_EPSILON);
}
当您致电train
init_weights()
时,可能会被称为
bool train( const Ptr<TrainData>& trainData, int flags )
{
// Some code
// ... and link weights
if( !(flags & UPDATE_WEIGHTS) )
init_weights();
// Even more code
这里是init_weights()
void init_weights()
{
//... More code
// initialize weights using Nguyen-Widrow algorithm
for( j = 0; j < n2; j++ )
{
double s = 0;
// .. more initialization code