Ejemplo n.º 1
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 };
        }
Ejemplo n.º 2
0
 /// <summary>
 /// ќбеспечивает соединение каждой карты признаков с каждой картой признаков входного сверточного сло¤.
 /// </summary>
 /// <param name="inputLayer">¬ходной сверточный слой.</param>
 public void ConnectTo(ConvolutionalLayer inputLayer)
 {
     // каждую карту признаков подключаем к входному слою
     foreach (var featureMap in FeatureMaps)
     {
         featureMap.ConnectTo(inputLayer, _kernel);
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// ќбеспечивает соединение каждой карты признаков с каждой картой признаков входного сверточного сло¤.
 /// </summary>
 /// <param name="inputLayer">¬ходной сверточный слой.</param>
 public void ConnectTo(ConvolutionalLayer inputLayer)
 {
     // каждую карту признаков подключаем к входному слою
     foreach (var featureMap in FeatureMaps)
     {
         featureMap.ConnectTo(inputLayer, _kernel);
     }
 }
Ejemplo n.º 4
0
        public void ConnectTo(ConvolutionalLayer inputLayer, KernelParams kernel)
        {
            // поочередно подключаем карту к каждой карте входного слоя,
            var inputsCounter = 0;
            foreach (var featureMap in inputLayer.FeatureMaps)
                ConnectWithoutBiasTo(featureMap, kernel, ref inputsCounter);

            ConnectLastToBias();
        }
Ejemplo n.º 5
0
        public void ConnectTo(ConvolutionalLayer inputLayer, KernelParams kernel)
        {
            // поочередно подключаем карту к каждой карте входного слоя,
            var inputsCounter = 0;

            foreach (var featureMap in inputLayer.FeatureMaps)
            {
                ConnectWithoutBiasTo(featureMap, kernel, ref inputsCounter);
            }

            ConnectLastToBias();
        }
Ejemplo n.º 6
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 };
        }