double[][] NETOUT; // NETOUT[countLayers + 1][] #endregion Fields #region Constructors // Конструкторы /* Создает полносвязанную сеть из 1 слоя. sizeX - размерность вектора входных параметров sizeY - размерность вектора выходных параметров */ public NeuralNW(int sizeX, int sizeY) { countLayers = 1; Layers = new LayerNW[countLayers]; Layers[0] = new LayerNW(sizeX, sizeY); Layers[0].GenerateWeights(); }
// Открывает НС public void OpenNW(String FileName) { byte[] binNW = File.ReadAllBytes(FileName); int k = 0; // Извлекаем количество слоев из массива countLayers = ReadFromArrayInt(binNW, ref k); Layers = new LayerNW[countLayers]; // Извлекаем размерность слоев int CountY1 = 0, CountX1 = ReadFromArrayInt(binNW, ref k); // Размерность входа countX = CountX1; // Выделяемпамять под выходы нейронов и дельта NETOUT = new double[countLayers + 1][]; NETOUT[0] = new double[CountX1]; DELTA = new double[countLayers][]; for (int 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 (int r = 0; r < countLayers; r++) for (int p = 0; p < Layers[r].countX; p++) for (int q = 0; q < Layers[r].countY; q++) { Layers[r][p, q] = ReadFromArrayDouble(binNW, ref k); } }