Esempio n. 1
0
 /// <summary>
 /// Создаём свёрточную нейронную сеть
 /// </summary>
 private void GenerateNSCov()
 {
     int NeuronCountInHiddenLayer = 8;
     HiddenLayer = new List<Neuron>();
     //Для свёрточной сети у нас будет два ядра - все нейроны будут продублированны
     for (int i = 0; i < NeuronCountInHiddenLayer; i++)
     {
         List<int> Root = new List<int>();//Входы нейрона
         for (int j = -1; j < 2; j++) //Пиксели изображения, которые нейрон берёт
             Root.Add(1 + j + i);
         List<int> Leaf = new List<int>();
         Leaf.Add(0);
         Leaf.Add(1);
         double AP = int.Parse(textBox4.Text);
         HiddenLayer.Add(new Neuron(Root, Leaf, 1, 0, AP, P)); //Создаём нейрон
         HiddenLayer.Add(new Neuron(Root, Leaf, 1, 0, AP, P)); //Создаём нейрон
     }
     //Инициализируем матрицы свёрточной сети
     for (int i = 0; i < Svertka.Length; i++)
     {
         Svertka[i] = P.NextDouble() / 10.0;
         Svertka2[i] = P.NextDouble() / 10.0;
     }
     List<int> Root2 = new List<int>();//Входы для выходных нейронов
     for (int j = 0; j < 2*NeuronCountInHiddenLayer; j++)
         Root2.Add(j);
     List<int> Leaf2 = new List<int>();
     Leaf2.Add(0);
     GoodOut = new Neuron(Root2, Leaf2, 0, 0, int.Parse(textBox4.Text), P);//Выходной положительный нейрон
     BadOut = new Neuron(Root2, Leaf2, 0, 0, int.Parse(textBox4.Text), P);//Выходной отрицательный нейрон
     VideoKernel1 = new Image<Bgr, byte>(450, 16, new Bgr(255, 255, 255));//Изорбажение для последующей отрисовки активности сети
     VideoKernel2 = new Image<Bgr, byte>(450, 16, new Bgr(255, 255, 255));//Изорбажение для последующей отрисовки активности сети
 }
Esempio n. 2
0
 /// <summary>
 /// Считаем ошибку для нейрона скрытой сети
 /// </summary>
 /// <param name="t1">Положительный нейрон выхода</param>
 /// <param name="t2">Отрицателньый нейрон выхода</param>
 /// <param name="myname">Номер текущего нейрона</param>
 public void ThetaForNode(Neuron t1, Neuron t2, int myname)
 {
     //Величина ошибки считается как обратная проекция нейрона
     BPThetta = t1.mass[myname] * t1.BPThetta + t2.mass[myname] * t2.BPThetta;
 }
Esempio n. 3
0
 /// <summary>
 /// Задаём нейронную сеть на старте
 /// </summary>
 private void GenerateNS()
 {
     int NeuronCountInHiddenLayer = 8; //Количество нейронов в скрытом слое
     HiddenLayer = new List<Neuron>();
     for (int i = 0; i < NeuronCountInHiddenLayer; i++)
     {
         List<int> Root = new List<int>(); //Входы нейрона
         for (int j = -1; j < 2; j++) //Нацеливаем входы на изображение
             Root.Add(1 + j + i);
         List<int> Leaf = new List<int>(); //Выходы нейрона
         Leaf.Add(0); //Положительный нейрон
         Leaf.Add(1); //Отрицательный нейрон
         double AP = int.Parse(textBox4.Text); //Параметр активации
         HiddenLayer.Add(new Neuron(Root, Leaf, 0, 0, AP, P)); //Создаём нейрон скрытого слоя с такими характеристиками
     }
     List<int> Root2 = new List<int>(); //Входы для выходных нейронов
     for (int j = 0; j < NeuronCountInHiddenLayer; j++)
         Root2.Add(j);
     List<int> Leaf2 = new List<int>();
     Leaf2.Add(0); //Выходы для выходных нейронов
     GoodOut = new Neuron(Root2, Leaf2, 0, 0, int.Parse(textBox4.Text), P); //Выходной положительный нейрон
     BadOut = new Neuron(Root2, Leaf2, 0, 0, int.Parse(textBox4.Text), P); //Выходной отрицательный нейрон
     VideoKernel1 = new Image<Bgr, byte>(450, 8, new Bgr(255, 255, 255)); //Изорбажение для последующей отрисовки активности сети
     VideoKernel2 = new Image<Bgr, byte>(450, 8, new Bgr(255, 255, 255));//Изорбажение для последующей отрисовки активности сети
 }