Teskari tarqalishli neyronlarni (kitobda 7-bob) kelgusi mavzuda kiritasizmi? Agar kelgusi mavzuga kiritmasangiz shu mavzuning oxiridan kiritish kerak
Evolyutsiyalashgan neyron qanday ishlaydi
Download 1.22 Mb.
|
13-mavzu
Evolyutsiyalashgan neyron qanday ishlaydi. Xo'sh, endi birinchi evolyutsiyadan keyin sun'iy neyronning ishi bo'yicha barcha xulosalarimizni sinab ko'rish vaqti keldi. Buni amalga oshirish uchun biz Pythondan foydalanishga murojaat qilamiz, lekin avval biz o'zimizning ro'yxatimizni barchasini boshlagan ma'lumotlar bilan ko'rsatamiz (13.2-jadval):
13.2-jadval Agar biz koordinatalar bo'yicha tekislikdagi nuqtalarni chizadigan bo'lsak, unda ularning qiymatlari funksiya grafigi: y = 2 x + 2.5 qiymatlari yonida joylashganligini sezamiz. Dastur tasodifiy import # Biz istalgan raqam bilan boshlaymiz w1 = A to'g'ri chiziqning qiyaligi w1 = 0.4 w1_vis = w1 # Nishabning boshlang'ich qiymatini eslaymiz # W2 = b parametrini ishga tushiring - Y o'qi orqali to'g'ri chiziqning o'tish nuqtasi uchun javobgardir w2 = randov.uniform (-4, 4) w2_vis = w2 # Parametrning boshlang'ich qiymatini eslaymiz # Dastlabki qatorning ma'lumotlar chiqishi print ('Boshlang'ich satr:', w1, '* X +', w2) # O’qish tezligi lr = 0,001 # Davrlar sonini o’rnatish davrlar = 3000 # X1 kirish ma'lumotlari qatorini (kirish ma'lumotlari tanlanmasi) yaratish arr_x1 = [1, 2, 3, 3.5, 4, 6, 7.5, 8.5, 9] # Ikkinchi kirishning kirish ma'lumotlarining qiymati har doim 1 ga teng x2 = 1 # Bir qator qadriyatlar yaratish (maqsadli qiymatlar) arr_y = [4.3, 7, 8.0, 10.1, 11.3, 14.2, 18.5, 19.3, 21.4] # Tanlanma bo'yicha ishlash oralig'idagi e (davrlar) uchun: i uchun (len (arr_x1)) oralig'ida: # len (arr) - funksiya qator uzunligini qaytaradi # Nuqtaning x koordinatasini olamiz x1 = arr_x1 [i] # Hisoblangan y, nuqta koordinatasini olamiz y = w1 * x1 + w2 # Maqsad Y, nuqta koordinatasini olamiz target_Y = arr_y [i] # Xatolik E = - (maqsad qiymati - neyron chiqishi) E = - (target_Y - y) # Vaznni yangilash qoidasiga binoan vaznni x darajasida o’zgartamiz w1 - = lr * E * x1 # Vaznni x2 = 1 ga o’zgartamiz # w2 - = stavka * E * x2 # Chunki x2 = 1 bo'lsa, unda bu omil qoldirilishi mumkin w2 - = lr * E # Ma'lumotlarning chiqishi to'g'ridan-to'g'ri tayyor print ('Tayyor qator:', w1, '* X +', w2) Tayyor to'g'ri chiziq: 2.058410130422831 * X + 2.5013583972057263 Ushbu kodni boshqalar singari havoladan yuklab olishingiz mumkin: https://github.com/CaniaCan/neuralmaster Keling, dastur kodini tavsiflaymiz: Dasturning boshida biz tasodifiy raqamlar bilan ishlash uchun modulni import qilamiz: import random Buning yordamida tasodifiy son bilan biz parametrning vazn koeffitsientini yaratamiz (w2 = b) - to'g'ri chiziqning o'qi orqali o'tishi uchun javobgar: w2 = random.uniform(-4, 4) Randov modulning usuli, uniform(from, to)- from dan, to gacha, tasodifiy haqiqiy sonni generatsiya qiladi. Ko'rib turganingizdek, bizning dasturimizda biz ilgari yozganimiz bilan solishtirganda juda ko'p o'zgarishlar mavjud emas. Biz o'zimizning vazn koeffitsientimiz (w2) bilan ikkinchi kiritishni (x2 = 1) qo'shdik. Koeffitsient (A) - vaznkoeffitsienti (w1), parametr (b) - vaznkoeffitsienti (w2) ga o'zgartirildi. Va, albatta, biz yaxshilangan xato funksiyasini va gradient tushish usuli yordamida vaznkoeffitsientlarini yangilashni amalga oshirdik. Natijada, bizning rivojlangan neyronimiz endi sinflash masalasini juda yaxshi bajaradi. Endi u ma'lumotlarni ikkita kirish usuli bilan sinflashi va shu bilan to'g'ridan-to'g'ri nol nuqtasida emas, balki butun Y o'qi bo'ylab to'g'ri chiziq bilan kesishishi bilan chiziqli sinflagichni olishi mumkin. Buni ko'rish uchun natijani ko'rib chiqamiz: Boshlang'ich chiziq: 0.4 * X + 0.3652477754014445 Ko'ryapsizmi! Bizning sun'iy neyronimiz qanday qilib ajoyib ish qiladi. Ko'zlari bilan deyarli farq qilmasa ham, u bemalol chiziqli bo'linishi mumkin edi. Endi avvalgidek shartni o'rnatamiz. Agar ma'lumotlar sinflash chizig'ining ustida joylashgan bo'lsa, demak bu jirafaning bir turi va pastdagi hamma narsa timsohlardir. Biz buni kirishlarga neyronning ilgari ko'rmagan qiymatlarini etkazib berish va o'qitilgan neyronning qaysi turga mansubligini mustaqil ravishda aniqlay olish-qilmasligini ko'rish orqali amalga oshiramiz. x1 = input ("X kengligi uchun qiymatni kiriting:") x1 = int (x1) T = input ("Y balandligi uchun qiymatni kiriting:") T = int (T) y = w1 * x1 + w2 # Shart agar T & gt; y: print ('Bu jirafa!') boshqa: print ('Bu timsoh!') Bizning qadriyatlarimizga kirgandan so'ng, jirafalar yoki timsohlar qanday ma'lumot ekanligini tekshiradigan va berilgan savolga javobni qaytaradigan shart kelib chiqadi. X: 4 kengligi uchun qiymatni kiriting Y balandligi qiymatini kiriting: 15 Bu jirafa! Download 1.22 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling