【问题标题】:Does OpenCV initialize weights matrix with zeros, cv::ml::ANN_MLPOpenCV是否用零初始化权重矩阵,cv::ml::ANN_MLP
【发布时间】:2018-06-13 04:12:42
【问题描述】:

它在 OpenCV 文档here中提到

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

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

还提到了:

UPDATE_WEIGHTS

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

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

【问题讨论】:

    标签: c++ opencv neural-network opencv3.3


    【解决方案1】:

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

    ANN_MLPImpl()
    {
        clear();
        setActivationFunction( SIGMOID_SYM, 0, 0);
        setLayerSizes(Mat());
        setTrainMethod(ANN_MLP::RPROP, 0.1, FLT_EPSILON);
    }
    

    当你调用traininit_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
    

    【讨论】:

    • 不应该更新我提到的文档的第一部分......这有点令人困惑
    猜你喜欢
    • 2017-03-12
    • 1970-01-01
    • 2012-12-04
    • 2021-03-13
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多