/// <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));//Изорбажение для последующей отрисовки активности сети }
/// <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; }
/// <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));//Изорбажение для последующей отрисовки активности сети }