Это упомянуто на документах OpenCV Вот
Искусственные нейронные сети — многослойные персептроны.
В отличие от многих других моделей в ML, которые построены и обучены в
однажды в модели MLP эти шаги разделены. Во-первых, сеть
с указанной топологией создается не по умолчанию
конструктор или метод ANN_MLP :: create. Все веса установлены
в нули. Затем сеть обучается с использованием набора ввода и
выходные векторы. Процедура тренировки может повторяться более одного раза,
то есть веса могут быть скорректированы на основе новых данных обучения.
А также упоминается:
UPDATE_WEIGHTS
Обновляйте веса сети, а не вычисляйте их с нуля.
В последнем случае веса инициализируются с использованием алгоритма Нгуена-Видроу.
Поэтому я хотел знать, что именно происходит с инициализацией веса, когда я иду на тренировку модели. Ответы, связанные с OpenCV 3.3.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
Других решений пока нет …