Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- class Number5
- {
- // Инициализация весов сети
- static int[] weights = new int[15];
- // Порог функции активации
- static int bias = 7;
- static Random random = new Random(Guid.NewGuid().GetHashCode());
- static void Main()
- {
- // Цифры (Обучающая выборка)
- var num0 = "111101101101111".ToCharArray();
- var num1 = "001001001001001".ToCharArray();
- var num2 = "111001111100111".ToCharArray();
- var num3 = "111001111001111".ToCharArray();
- var num4 = "101101111001001".ToCharArray();
- var num5 = "111100111001111".ToCharArray();
- var num6 = "111100111101111".ToCharArray();
- var num7 = "111001001001001".ToCharArray();
- var num8 = "111101111101111".ToCharArray();
- var num9 = "111101111001111".ToCharArray();
- // Список всех вышеуказанных цифр
- char[][] nums = { num0, num1, num2, num3, num4, num5, num6, num7, num8, num9 };
- // Виды цифры 5 (Тестовая выборка)
- var num51 = "111100111000111".ToCharArray();
- var num52 = "111100010001111".ToCharArray();
- var num53 = "111100011001111".ToCharArray();
- var num54 = "110100111001111".ToCharArray();
- var num55 = "110100111001011".ToCharArray();
- var num56 = "111100101001111".ToCharArray();
- // Тренировка сети
- for (int i = 0; i < 10000; i++)
- {
- // Генерируем случайное число от 0 до 9
- var option = random.Next(0, 9 + 1);
- // Если получилось НЕ число 5
- if (option != 5)
- {
- // Если сеть выдала True/Да/1, то наказываем ее
- if (proceed(nums[option])) decrease(nums[option]);
- }
- // Если получилось число 5
- else
- {
- // Если сеть выдала False/Нет/0, то показываем, что эта цифра - то, что нам нужно
- if (!proceed(num5)) increase(num5);
- }
- }
- // Вывод значений весов
- Console.WriteLine(String.Join(", ", weights));
- // Прогон по обучающей выборке
- Console.WriteLine("0 это 5? " + proceed(num0));
- Console.WriteLine("1 это 5? " + proceed(num1));
- Console.WriteLine("2 это 5? " + proceed(num2));
- Console.WriteLine("3 это 5? " + proceed(num3));
- Console.WriteLine("4 это 5? " + proceed(num4));
- Console.WriteLine("6 это 5? " + proceed(num6));
- Console.WriteLine("7 это 5? " + proceed(num7));
- Console.WriteLine("8 это 5? " + proceed(num8));
- Console.WriteLine("9 это 5? " + proceed(num9), "\r\n");
- // Прогон по тестовой выборке
- Console.WriteLine("Узнал 5? " + proceed(num5));
- Console.WriteLine("Узнал 5 - 1? " + proceed(num51));
- Console.WriteLine("Узнал 5 - 2? " + proceed(num52));
- Console.WriteLine("Узнал 5 - 3? " + proceed(num53));
- Console.WriteLine("Узнал 5 - 4? " + proceed(num54));
- Console.WriteLine("Узнал 5 - 5? " + proceed(num55));
- Console.WriteLine("Узнал 5 - 6? " + proceed(num56));
- Console.WriteLine("\r\nНажмите любую кнопку для выхода");
- Console.ReadKey();
- }
- // Является ли данное число 5
- static bool proceed(char[] number)
- {
- // Рассчитываем взвешенную сумму
- var net = 0;
- for (int i = 0; i < 15; i++)
- {
- net += int.Parse(number[i].ToString()) * weights[i];
- }
- // Превышен ли порог? (Да - сеть думает, что это 5. Нет - сеть думает, что это другая цифра)
- return net >= bias;
- }
- // Уменьшение значений весов, если сеть ошиблась и выдала 1
- static void decrease(char[] number)
- {
- for (int i = 0; i < 15; i++)
- {
- // Возбужденный ли вход
- if (int.Parse(number[i].ToString()) == 1)
- {
- // Уменьшаем связанный с ним вес на единицу
- weights[i]--;
- }
- }
- }
- // Увеличение значений весов, если сеть ошиблась и выдала 0
- static void increase(char[] number)
- {
- for (int i = 0; i < 15; i++)
- {
- // Возбужденный ли вход
- if (int.Parse(number[i].ToString()) == 1)
- {
- // Увеличиваем связанный с ним вес на единицу
- weights[i]++;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement