/// <summary> /// Метод OpenNW открывает полносвязанную нейроную сеть /// </summary> /// <param name="fileName">Имя нейроной сети</param> public void OpenNW(String fileName) { byte[] binNW = File.ReadAllBytes(fileName); Int32 k = 0; // Извлекаем количество слоев из массива CountLayers = ReadFromArrayInt(binNW, ref k); Layers = new LayerNW[CountLayers]; // Извлекаем размерность слоев Int32 CountY1 = 0; Int32 CountX1 = ReadFromArrayInt(binNW, ref k); // Размерность входа CountX = CountX1; // Выделяемпамять под выходы нейронов и дельта NETOUT = new Double[CountLayers + 1][]; NETOUT[0] = new Double[CountX1]; DELTA = new Double[CountLayers][]; for (Int32 i = 0; i < CountLayers; i++) { CountY1 = ReadFromArrayInt(binNW, ref k); Layers[i] = new LayerNW(CountX1, CountY1); CountX1 = CountY1; // Выделяем память NETOUT[i + 1] = new Double[CountY1]; DELTA[i] = new Double[CountY1]; } // Размерность выхода CountY = CountY1; // Извлекаем и записываем сами веса for (Int32 r = 0; r < CountLayers; r++) { for (Int32 p = 0; p < Layers[r].GetCountX; p++) { for (Int32 q = 0; q < Layers[r].GetCountY; q++) { Layers[r][p, q] = ReadFromArrayDouble(binNW, ref k); } } } }
Double[][] DELTA; // NETOUT[countLayers][] /// <summary> /// Конструктор NeuralNW создает полносвязанную сеть из 1 слоя /// </summary> /// <param name="sizeX">Размерность вектора входных параметров</param> /// <param name="sizeY">Размерность вектора выходных параметров</param> public NeuralNW(Int32 sizeX, Int32 sizeY) { Layers = new LayerNW[CountLayers = 1]; Layers[0] = new LayerNW(sizeX, sizeY); Layers[0].GenerateWeights(); }