/// <summary> /// Инициализирует экземпляр класса Layer со связями. /// </summary> /// <param name="links">Массив связей со следующим слоем.</param> /// <param name="func">Активационная функция для слоя по-умолчанию.</param> public Layer(bool[,] links, FunctionType func) { _links = (bool[,])links.Clone(); _neurons = new Neuron[links.GetLength(0)]; //резервируем место под нейроны for (int i = 0; i < _neurons.Length; ++i) _neurons[i] = new Neuron(1, func, 1.0); LayerFunction = func; FuncDefaultParam = 1.0; }
/// <summary> /// Инициализирует экземпляр класса Layer и входы нейронов с помощью связей предыдущего слоя. /// </summary> /// <param name="prevLayer">Слой-предшественник.</param> /// <param name="links">Массив связей со следующим слоем.</param> /// <param name="func">Активационная функция для слоя по-умолчанию.</param> public Layer(Layer prevLayer, bool[,] links, FunctionType func) { var oldLinks = prevLayer.Links; if (oldLinks.GetLength(1) != links.GetLength(0)) throw new Exception("Массив связей не соответствует числу нейронов."); _links = (bool[,])links.Clone(); _neurons = new Neuron[links.GetLength(0)]; //резервируем место под нейроны for (int i = 0; i < oldLinks.GetLength(1); ++i) //i - индекс столбца { int sinapsCount = 0; //счетчик синапсов нейрона for (int j = 0; j < oldLinks.GetLength(0); ++j) //j - индекс строки { if (oldLinks[j, i]) ++sinapsCount; } _neurons[i] = new Neuron(sinapsCount, func, 1.0); } LayerFunction = func; FuncDefaultParam = 1.0; }
/// <summary> /// Инициализирует экземпляр класса Layer с заданным числом нейронов c одним входным сигналом(используется когда связи неизвестны заранее). /// </summary> /// <param name="neuronCount">Число нейронов для слоя.</param> /// <param name="func">Активационная функция по-умолчанию.</param> public Layer(int neuronCount, FunctionType func) { _neurons = new Neuron[neuronCount]; //сами нейроны в конструкторе слоя не создаются, только резервируется место под них for (int i = 0; i < _neurons.Length; ++i) _neurons[i] = new Neuron(1, func, 1.0); LayerFunction = func; FuncDefaultParam = 1.0; }