Нейрон желісі бойынша суреттегі әріпті тану
- itblogkz
- Жасанды интеллект / 11 сәуір 2015, 23:44
- 2658
Нейрон желісі жайында көп еститінмін. Кеше бір студентке көмектесемін деп, ақыры соны оқуға тура келді. Шамалы шет жағасын түсінгендей болдым да кішігірім программа жазып тастадым.
Қысқаша айтқанда, нейрон желісі — тәжірибе жинақтау, жиналған тәжірибе нәтижесінде шешім қабылдауға негізделеді. Жалпы, адамның да өмірі солай ғой. Бәрін біліп туылмайсың, көбіне, жылдар бойы жинаған тәжірибе негізінде шешім қабылдап жатамыз. Бірақ, адамның ойлау жүйесі өте күрделі. Ғалымдар оның программалық үлгісін ойлап табатын болса, 21 ғасырдың ең мықты жетістігі болар еді.
Нейрон желісі — зерттеуге тұрарлық тақырып. Оны қолданып көптеген пайдалы программалар жасауға болады. Өз басым кішігірім робот жасағым келіп кетті. Әзірге оның қызметі қандай болатын білмеймін. Орысша айтқанда, «Пока сама идея заводит)». Ардуиномен айналысып белігілі бір жетістікке жеткен жігіттер болса, жекеге сөйлесуге қуаныштымын. вк
Программаға келсек, жалпы негізгі функцияларды көрсетіп өтемін. (C# тілінде)
Идея мынадай:
Нейронның моделі
Суретті массивке айналдыру методы:
Суреттегі әріпті тану методы
Екі массивті салыстырып салмағын анықтау методы
Мынау программаның түрі:
Қажетті класстарды мына жерден жүктеп ала аласыз.
Қысқаша айтқанда, нейрон желісі — тәжірибе жинақтау, жиналған тәжірибе нәтижесінде шешім қабылдауға негізделеді. Жалпы, адамның да өмірі солай ғой. Бәрін біліп туылмайсың, көбіне, жылдар бойы жинаған тәжірибе негізінде шешім қабылдап жатамыз. Бірақ, адамның ойлау жүйесі өте күрделі. Ғалымдар оның программалық үлгісін ойлап табатын болса, 21 ғасырдың ең мықты жетістігі болар еді.
Нейрон желісі — зерттеуге тұрарлық тақырып. Оны қолданып көптеген пайдалы программалар жасауға болады. Өз басым кішігірім робот жасағым келіп кетті. Әзірге оның қызметі қандай болатын білмеймін. Орысша айтқанда, «Пока сама идея заводит)». Ардуиномен айналысып белігілі бір жетістікке жеткен жігіттер болса, жекеге сөйлесуге қуаныштымын. вк
Программаға келсек, жалпы негізгі функцияларды көрсетіп өтемін. (C# тілінде)
Идея мынадай:
- 100*100 Панельге әріпті саламыз(ақ фон, қара түс)
- Суретті 30*30 кішірейтіп, ондағы әрбір пиксельдің түсіне байланысты 30*30 массивін 0 не 1 сандарымен толтырамыз. 0 — ақ, 1 — қара.
- Программа дұрыс таппаса, сүретті сақтап аламыз.
- Тану процесі салынған суреттің массивін жадыда бар суреттің массивтерімен салыстырып, ішіндегі сәйкестік дәрежесі(салмағы) ең көбін таңдау түрінде жүзеге асады
Нейронның моделі
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; }
Мынау программаның түрі:
Қажетті класстарды мына жерден жүктеп ала аласыз.
-
+6
2) Бағдарламадағы «Дұрыс жауапты енгізіңіз» деген бөліктері істейді ме? Кодтан оған арналған бөліктерді көріп тұрған жоқпын.