Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 2
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;
        }
Ejemplo n.º 3
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;
        }