// Запуск работы сети, получение выходных данных public double[] RunNet() { double[] d_OutputData = null; // Выполнение операций последовательно для каждого слоя for (int i = 0; i < l_LayersNet.Length; i++) { // Умножение входного вектора на матрицу весов и запись результата в выходной вектор l_LayersNet[i].GetSetOutputVector = OperationsWithMatrix.MultipleVectorOnMatrix(l_LayersNet[i].GetSetInputVector, l_LayersNet[i].GetSetMatrixWeights); // Прогон выходного вектора через функцию активации OperationsWithMatrix.ActivationVector(l_LayersNet[i].GetSetOutputVector); // Если еще слой, то передача ему выходного вектора, иначе передача на выход if (i == l_LayersNet.Length - 1) { d_OutputData = l_LayersNet[i].GetSetOutputVector; } else { // Добавление смещения к вектору l_LayersNet[i].GetSetOutputVector = OperationsWithMatrix.AddOffsetVector(l_LayersNet[i].GetSetOutputVector); l_LayersNet[i + 1].GetSetInputVector = l_LayersNet[i].GetSetOutputVector; } } return(d_OutputData); }
// Получение нейросети из БЗ и заполнение матриц весов для каждого слоя public void GetDataNet() { // Получение слоев из БЗ l_LayersNet = GetLayersNet(); // Просмотр слоев for (int i = 0; i < l_LayersNet.Length; i++) { // Получаем входы первого слоя if (i == 0) { l_LayersNet[i].GetSetInputNodes = GetInputNodesNet(l_LayersNet[i].GetName); } // Входы для остальных слоев else { l_LayersNet[i].GetSetInputNodes = GetInputNodesOtherLayers(l_LayersNet[i - 1].GetSetOutputNodes); } // Выходы слоя l_LayersNet[i].GetSetOutputNodes = GetOutputNodes(l_LayersNet[i].GetName); // Получение матрицы весов для каждого слоя l_LayersNet[i].GetSetMatrixWeights = OperationsWithMatrix.GetMatrixWeight(l_LayersNet[i].GetSetInputNodes, l_LayersNet[i].GetSetOutputNodes); } }