Пример #1
0
        /// <summary>
        /// Инициализирует слой по умолчанию с указанным количество нейронов и количеством соединений на один нейрон и количеством весов на слой.
        /// </summary>
        /// <param name="neuronsCount"></param>
        /// <param name="inputsPerNeuron"></param>
        /// <param name="weightsCount"></param>
        public Layer(int neuronsCount, int inputsPerNeuron, int weightsCount)
        {
            Neurons = new Neuron[neuronsCount];
            for (var i = 0; i < Neurons.Length; i++)
            {
                Neurons[i] = new Neuron(inputsPerNeuron);
            }

            Weights = new Weight[weightsCount];
            for (var i = 0; i < Weights.Length; i++)
            {
                Weights[i] = new Weight();
            }
        }
Пример #2
0
        public ConvolutionalLayer(int mapsCount, int mapWidth, int mapHeight, int inputsPerNeuron, KernelParams kernel)
        {
            // инициализаци¤ вручную. —оздаетс¤ пустой слой, затем карты признаков и из них копируютс¤ ссылки на нейроны и весы самого сло¤
            FeatureMaps = new FeatureMap[mapsCount];
            Neurons = new Neuron[mapWidth*mapHeight*mapsCount];
            Weights = new Weight[inputsPerNeuron*mapsCount];

            for (int fi = 0, w = 0, n = 0; fi < FeatureMaps.Length; fi++)
            {
                // создаем очередную карту признаков - 2D слой
                FeatureMaps[fi] = new FeatureMap(mapWidth, mapHeight, inputsPerNeuron);

                // заполн¤ем из новой карты признаков основные массивы сло¤ - нейроны и веса
                foreach (var neuron in FeatureMaps[fi].Neurons)
                    Neurons[n++] = neuron;
                foreach (var weight in FeatureMaps[fi].Weights)
                    Weights[w++] = weight;
            }

            _kernel = kernel;
        }