0

它在此处的 OpenCV 文档中提到

人工神经网络 - 多层感知器。

与 ML 中的许多其他模型同时构建和训练不同,在 MLP 模型中,这些步骤是分开的。首先,使用非默认构造函数或方法 ANN_MLP::create 创建具有指定拓扑的网络。所有的权重都设置为零。然后,使用一组输入和输出向量训练网络。训练过程可以重复多次,即可以根据新的训练数据调整权重。

并且还提到:

UPDATE_WEIGHTS

更新网络权重,而不是从头开始计算它们。 在后一种情况下,权重使用 Nguyen-Widrow 算法进行初始化

所以我想知道当我开始训练模型时权重初始化到底发生了什么。还感谢与 OpenCV 3.3.1 相关的答案

4

1 回答 1

4

您有任何理由怀疑文档吗?OpenCV 是开源库,所以你可以在这里自己查看下面的内容

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
于 2018-01-03T13:37:24.360 回答