예제 #1
0
 public override void ConnectTo(Layer inputLayer)
 {
     foreach (var featureMap in FeatureMaps)
     {
         featureMap.ConnectTo(inputLayer);
     }
 }
예제 #2
0
        /// <summary>
        /// Обеспечивает полносвязное соединение слоя с выходами входного слоя
        /// </summary>
        /// <param name="inputLayer">Входной слой</param>
        public virtual void ConnectTo(Layer inputLayer)
        {
            // подключение всех нейронов к предыдущему слою
            for (int neuronIndex = 0, weightIndex = 0; neuronIndex < Neurons.Length; neuronIndex++)
            {
                var neuron = Neurons[neuronIndex];

                // заполнение входных соединений нейрона:
                // используем все выходы входного слоя + биас
                int ci;
                for (ci = 0; ci < inputLayer.Neurons.Length; ci++)
                {
                    var inputNeuron = inputLayer.Neurons[ci];
                    var weidth = Weights[weightIndex++];
                    neuron.InputConnections[ci] = new InputConnection(inputNeuron, weidth);
                }

                var biasWeight = Weights[weightIndex++];
                neuron.InputConnections[ci] = new InputConnection(Neuron.Bias, biasWeight);
            }
        }
예제 #3
0
 public override void ConnectTo(Layer inputLayer)
 {
     throw new InvalidOperationException("Нельзя присоединить карту признаков к линейному слою.");
 }
예제 #4
0
        public Network()
        {
            // 0 слой - входной входных соединений нет
            InputLayer = new Layer2D(InputImageWidth, InputImageHeight, 0, 0);

            // 1 слой - сверточный, 156 весов, 26364 входных соединений
            var layer1 = new ConvolutionalLayer(L1MapsCount, L1MapWidth, L1MapHeight, L1InputsPerNeuron, Kernel);
            layer1.ConnectTo(InputLayer);

            // 2 слой - сверточный, 7550 весов, 188750 входных соединений
            var layer2 = new ConvolutionalLayer(L2MapsCount, L2MapWidth, L2MapHeight, L2InputsPerNeuron, Kernel);
            layer2.ConnectTo(layer1);

            // 3 слой - полносвязный, 125100 весов, 125100 соединений
            var layer3 = new Layer(L3NeuronsCount, L3InputsPerNeuron);
            layer3.ConnectTo(layer2);

            // 4 слой - полносвязный, 1010 весов, 1010 соединений
            OutputLayer = new Layer(L4NeuronsCount, L4InputsPerNeuron);
            OutputLayer.ConnectTo(layer3);

            for (int y = 0, n = 0; y < InputLayer.Height; y++)
            {
                for (var x = 0; x < InputLayer.Width; x++, n++)
                {
                    Debug.Assert(InputLayer.Neurons[n] == InputLayer.Neurons2D[y][x],
                                 string.Format("n => y, x: {0} => {1}, {2}", n, y, x));
                }
            }

            Layers = new[] { InputLayer, layer1, layer2, layer3, OutputLayer };
        }