Нейрон желісі бойынша суреттегі әріпті тану

Бағдарламалау
Нейрон желісі жайында көп еститінмін. Кеше бір студентке көмектесемін деп, ақыры соны оқуға тура келді. Шамалы шет жағасын түсінгендей болдым да кішігірім программа жазып тастадым.

Қысқаша айтқанда, нейрон желісі — тәжірибе жинақтау, жиналған тәжірибе нәтижесінде шешім қабылдауға негізделеді. Жалпы, адамның да өмірі солай ғой. Бәрін біліп туылмайсың, көбіне, жылдар бойы жинаған тәжірибе негізінде шешім қабылдап жатамыз. Бірақ, адамның ойлау жүйесі өте күрделі. Ғалымдар оның программалық үлгісін ойлап табатын болса, 21 ғасырдың ең мықты жетістігі болар еді.

Нейрон желісі — зерттеуге тұрарлық тақырып. Оны қолданып көптеген пайдалы программалар жасауға болады. Өз басым кішігірім робот жасағым келіп кетті. Әзірге оның қызметі қандай болатын білмеймін. Орысша айтқанда, «Пока сама идея заводит)». Ардуиномен айналысып белігілі бір жетістікке жеткен жігіттер болса, жекеге сөйлесуге қуаныштымын. вк

Программаға келсек, жалпы негізгі функцияларды көрсетіп өтемін. (C# тілінде)
Идея мынадай:
  1. 100*100 Панельге әріпті саламыз(ақ фон, қара түс)
  2. Суретті 30*30 кішірейтіп, ондағы әрбір пиксельдің түсіне байланысты 30*30 массивін 0 не 1 сандарымен толтырамыз. 0 — ақ, 1 — қара.
  3. Программа дұрыс таппаса, сүретті сақтап аламыз.
  4. Тану процесі салынған суреттің массивін жадыда бар суреттің массивтерімен салыстырып, ішіндегі сәйкестік дәрежесі(салмағы) ең көбін таңдау түрінде жүзеге асады

Нейронның моделі

    public class Neuron
    {
        public string Name { get; set; }
        public int Weight { get; set; }
        public int[,] Memory = new int[30,30];
    }


Суретті массивке айналдыру методы:

public static int[,] BitmapToArray(Bitmap bmp)
        {
            if (bmp.Height > 30) bmp = ImageManager.Resize(bmp);
            int[,] arr = new int[30, 30];
            for (int i = 0; i < 30; i++)
            {
                for (int j = 0; j < 30; j++)
                {
                    var pxl = bmp.GetPixel(i, j);
                    arr[i, j] = pxl.A == 255 ? 1 : 0;
                }
            }
            return arr;
        }


Суреттегі әріпті тану методы

public static Neuron Recognize(Bitmap bmp)
        {
            var input = BitmapToArray(bmp);
            var neurons = GetNeurons();
            if (neurons == null) return null;
            int maxWeight = 0;
            Neuron output = neurons[0];
            foreach (var neuron in neurons)
            {
                neuron.Weight = Compare(input, neuron.Memory);
                if (neuron.Weight > maxWeight)
                {
                    maxWeight = neuron.Weight;
                    output = neuron;
                }
            }
            return output;
        }

Екі массивті салыстырып салмағын анықтау методы

 private static int Compare(int[,] input, int[,] memory)
        {
            int weight = 0;
            for (int i = 0; i < 30; i++)
            {
                for (int j = 0; j < 30; j++)
                {
                    if (input[i, j] == memory[i, j]) weight++;
                }
            }
            return weight;
        }

Мынау программаның түрі:


Қажетті класстарды мына жерден жүктеп ала аласыз.

0 пікір

Тек қана тіркелген және авторизациядан өткен қолданушылар пікір қалдыра алады.