Amaliy ish №8. Timsollarni tanib olish masalasini Xopfild neyron tarmog‘i bilan yechish
Ishdan maqsad: Ushbu amaliy ishida talabalar timsollarni tanib olish masalasini Xopfild neyron tarmog‘i bilan yechisho’rganadilar.
Kerakli jihozlar va uskunalar: Kompyuter, vedio proektor
Nazariy ma’lumot.
U rasmlarni tanib olish uchun neyron tarmog'ini yaratish qanchalik oson ekanligini osonlik bilan ko'rsatdi. Ammo bitta narsa bor - u neyron tarmoq deb ta'riflagan narsa emas. Uning keyingi maqolasidan oldin men sizga xuddi shu muammoni qanday hal qilishni aytmoqchiman, lekin Kohonen neyron tarmog'idan foydalanish.
Shunday qilib, biz qora rangda oq bilan yozilgan raqamlarni taniymiz, masalan:
Rasmlar 45x45 piksel, ya'ni bizning neyron tarmog'imizga kirishlar 45 * 45 bo'ladi.
Oddiylik uchun biz faqat 0 dan 5 gacha raqamlarni taniymiz, shuning uchun bizda 6 ta neyron bo'ladi - har bir javob uchun bittadan.
Bizning neyron tarmog'imizning tuzilishi:
Tarmoq kirishining neyronga har bir ulanishi o'z vazniga ega. Bog'lanish orqali o'tadigan impuls o'zgaradi: impuls = impuls * ulanish_og'irligi.
Neyron barcha kirishlardan impulslarni oladi va ularni oddiygina umumlashtiradi. Eng yuqori umumiy impulsga ega bo'lgan neyron g'alaba qozonadi. Bu oddiy, biz uni amalga oshirishimiz mumkin!
Tarmoq elementlarini ifodalash uchun sinflar (C #):
// Kirish
umumiy sinf Kirish
{
// Neyronlarga ulanish
Ommaviy havolalar chiquvchi havolalar;
}
// Kirishni neyronga ulang
umumiy sinf havolasi
{
// Neyron
umumiy neyron neyroni;
// Bog'lanish vazni
umumiy ikki tomonlama Og'irlik;
}
ommaviy sinf neyron
{
// Neyronning barcha kirishlari
umumiy kirish havolalari;
// Neyron tomonidan to'plangan zaryad
umumiy ikki tomonlama quvvat (olish; o'rnatish;)
}
Tarmoqni yaratish va ishga tushirish zerikarli ish, qiziqqan har bir kishi uchun - ilova qilingan manbaga qarang. Men faqat pikselning rangi 0 dan 255 gacha bo'lgan raqam ekanligiga to'xtalib o'taman, 0 qora, 255 oq, ular orasidagi ranglar kulrang rangda.
KohonenNetwork sinfining holati Input massivi va Neuron massividir:
ommaviy sinf KohonenNetwork
{
faqat o'qish uchun maxsus kirish _kirishlari;
faqat o'qiladigan shaxsiy Neuron _neyronlar;
...
}
Faraz qilaylik, bizning tarmog'imiz allaqachon o'qitilgan. Keyin rasmda nima ko'rsatilganligini bilish uchun biz Handle usulini chaqiramiz, u erda hamma narsa ko'paytiriladi, qo'shing va maksimalni toping:
// Vektorni neyron tarmoq orqali o'tkazing
umumiy int tutqichi (int kiritish)
{
uchun (var i = 0; i< _inputs.Length; i++)
{
var inputNeuron = _inputs [i];
foreach (inputNeuron.OutgoingLinks ichidagi outgoingLinkni o'zgartiring)
{
outgoingLink.Neuron.Power + = outgoingLink.Weight * kiritish [i];
}
}
var maxIndex = 0;
uchun (var i = 1; i< _neurons.Length; i++)
{
agar (_neyronlar [i] .Power> _neurons.Power)
maxIndex = i;
}
// barcha neyronlardan impulsni olib tashlang:
foreach (var outputNeuron in _neurons)
{
outputNeuron.Power = 0;
}
maxIndexni qaytarish;
}
Ammo tarmoqdan biror narsa so'rashdan oldin, uni o'rgatish kerak. Trening uchun biz rasmlarni taqdim etamiz va ularda nima chizilganligini ko'rsatamiz:
O'rganish - bu ulanishlar og'irliklarining o'zgarishi:
public void Study (int input, int correctAnswer)
{
var neuron = _neyronlar;
uchun (var i = 0; i< neuron.IncomingLinks.Length; i++)
{
var incomingLink = neuron.IncomingLinks [i];
incomingLink.Weight = incomingLink.Weight + 0,5 * (kirish [i] - incomingLink.Weight);
}
}
Ikki shriftda mashq qilingandan so'ng, neyron tarmoq raqamlarni boshqa shriftlardan ham ajratib turadi. Xususan, quyidagi raqamlar bo'yicha nazorat testi o'tkaziladi:
Albatta, bunday hunarmandchilik captchalarni tanib olish uchun mos emas - hamma narsa ishlashni to'xtatadi, shunchaki tasvirni siljitish, cho'zish yoki aylantirish kerak.
Biroq, agar siz oddiy misollar bilan boshlasangiz, neyron tarmoqlardan foydalanish unchalik qiyin emasligi hammaga ayon bo'ladi.
Shunga ko'ra, neyron tarmoq kirish sifatida ikkita raqamni oladi va chiqishda boshqa raqamni berishi kerak - javob. Endi neyron tarmoqlarning o'zlari haqida.
Neyron tarmoqlar inson miyasiga o'xshash analitik hisob-kitoblarni talab qiladigan murakkab muammolarni hal qilish uchun ishlatiladi. Neyron tarmoqlar uchun eng keng tarqalgan foydalanish:
Tasniflash- parametrlar bo'yicha ma'lumotlarni taqsimlash. Misol uchun, kirish joyida odamlar to'plami beriladi va ulardan qaysi biri qarz berishni va kim bermasligini hal qilish kerak. Bu ishni yosh, to'lov qobiliyati, kredit tarixi va boshqalar kabi ma'lumotlarni tahlil qiladigan neyron tarmoq orqali amalga oshirish mumkin.
Bashorat- keyingi bosqichni bashorat qilish qobiliyati. Masalan, qimmatli qog'ozlar bozoridagi vaziyatga qarab qimmatli qog'ozlarning ko'tarilishi yoki tushishi.
Tan olish- hozirgi vaqtda neyron tarmoqlardan eng keng tarqalgan foydalanish. Googleda surat qidirayotganingizda yoki telefon kameralarida yuzingiz holatini aniqlab, uni alohida ajratib koʻrsatish va boshqa koʻp hollarda foydalaniladi.
|