Он упоминается в документах OpenCV здесь

Искусственные нейронные сети - многослойные персептроны.

В отличие от многих других моделей машинного обучения, которые создаются и обучаются в однажды в модели MLP эти шаги разделены. Во-первых, сеть с указанной топологией создается с использованием нестандартного конструктор или метод ANN_MLP :: create. Все веса установлены в нули. Затем сеть обучается с использованием набора входных данных и выходные векторы. Процедуру обучения можно повторять более одного раза, то есть веса могут быть скорректированы на основе новых данных обучения.

А также упоминается:

UPDATE_WEIGHTS

Обновляйте веса сети, а не вычисляйте их с нуля. В последнем случае веса инициализируются с использованием алгоритма Нгуена-Видроу .

Поэтому я хотел знать, что именно происходит с инициализацией веса, когда я приступаю к обучению модели. Также приветствуются ответы, связанные с OpenCV 3.3.1.

0
Ayush Pandey 3 Янв 2018 в 16:17

1 ответ

Лучший ответ

Есть ли у вас основания сомневаться в документации? 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
4
Dmitrii Z. 3 Янв 2018 в 13:42