Ejemplo n.º 1
0
 /// <summary>Инициализация новой многослойной нейронной сети</summary>
 /// <param name="InputsCount">Количество входов сети</param>
 /// <param name="NeuronsCount">Количество нейронов в слоях</param>
 /// <param name="Initialize">Функция инициализации коэффициентов матриц передачи слоёв</param>
 public MultilayerPerceptron(
     int InputsCount,
     [NotNull] IEnumerable <int> NeuronsCount,
     [CanBeNull] NetworkCoefficientInitializer Initialize = null)
     : this(CreateLayersMatrix(InputsCount, NeuronsCount, Initialize ?? GetStandardRandomInitializer()))
 {
 }
Ejemplo n.º 2
0
 /// <summary>Инициализация матрицы весовых коэффициентов слоя</summary>
 /// <param name="LayerWeights">Матрица весовых коэффициентов слоя</param>
 /// <param name="LayerIndex">Индекс слоя</param>
 /// <param name="Initializer">Функция инициализации весовых коэффициентов слоя</param>
 private static void InitializeLayerWeightsMatrix(
     [NotNull] double[,] LayerWeights,
     int LayerIndex,
     [NotNull] NetworkCoefficientInitializer Initializer)
 {
     for (var i = 0; i < LayerWeights.GetLength(0); i++)
     {
         for (var j = 0; j < LayerWeights.GetLength(1); j++)
         {
             LayerWeights[i, j] = Initializer.Invoke(LayerIndex, i, j);
         }
     }
 }
Ejemplo n.º 3
0
        private static double[][,] CreateLayersMatrix(
            int InputsCount,
            [NotNull] IEnumerable <int> NeuronsCount,
            [NotNull] NetworkCoefficientInitializer Initialize)
        {
            var neurons_count = NeuronsCount.ToArray();
            var layers_count  = neurons_count.Length;
            var weights       = new double[layers_count][, ];

            var w = new double[neurons_count[0], InputsCount];

            weights[0] = w;
            InitializeLayerWeightsMatrix(w, 0, Initialize);

            for (var layer = 1; layer < layers_count; layer++)
            {
                w = new double[neurons_count[layer], neurons_count[layer - 1]];
                weights[layer] = w;
                InitializeLayerWeightsMatrix(w, layer, Initialize);
            }

            return(weights);
        }