Teskari tarqalishli neyronlarni (kitobda 7-bob) kelgusi mavzuda kiritasizmi? Agar kelgusi mavzuga kiritmasangiz shu mavzuning oxiridan kiritish kerak
Download 1.22 Mb.
|
13-mavzu
Mantiqiy (OR-YOKI) funksiyasi. Keling, shunga o'xshash tarzda boshqa (OR-YOKI) mantiqiy funksiyani tahlil qilaylik.
Mantiqiy (OR-YOKI) quyidagi chinlik jadvaliga ega:
Mantiqiy (OR) funksiyani mantiqiy qo'shish deb atash mumkin. Haqiqatdan ham: x1 + x2 = 0 + 0 = 0 x1 + x2 = 1 + 0 = 1 x1 + x2 = 0 + 1 = 1 x1 + x2 = 1 + 1 = 1 Mantiqiy funksiyalarning qiymatlari ikkilik bo'lganligi sababli, mantiqiy qo'shishda: 1 + 1 = 1. Ma'lumotlar massivi va o'qitilgan neyronni tekshirish bo'yicha so'nggi AND mantiqiy funksiyasi uchun tuzilgan dasturga o'zgartirishlar kiritamiz. Shuningdek b parametrini olib tashlab, usiz koeffitsientlar qanday bo'lishini ko'rib chiqamiz. Dastur: import random import numpy as np # Biz istalgan raqam bilan w1 = A to'g'ri chiziqning qiyaligini belgilaymiz w1 = random.uniform(-4, 4) w1_vis = w1 # Dastlabki w1 vaznni saqlaymiz # Y o'qi orqali to'g'ri chiziqning o'tish nuqtasi uchun W2 = b parametrini ishga tushiring w2 = random.uniform(-4, 4) w2_vis = w2 # w2 vaznining boshlang'ich qiymatini saqlang # Vazn koeffitsientlarining boshlang'ich qiymatlari bo'yicha ma'lumotlarni chiqaring print ('Dastlabki vaznlar:', '\ nw1 =', w1, '\ nw2 =', w2) # O'qish tezligi lr = 0,001 # Davrlar sonini o’rnatish epochs = 5000 # Birlik faollashtirish funksiyasi uchun chegarani o'rnatish bias = 3 # Mantiqiy (OR-YOKI) funksiyasi uchun ma'lumotlar qatorini yaratish log_or = np.array ([[0, 0, 0], [1, 0, 1], [0, 1, 1], [1, 1, 1]]) # Tanlanma bo'yicha ishlash for e in range(epochs): for i in range(log_or.shape[0]): # shape - massivning o'lchamini qaytaradi, [0] - massivdagi qatorlar indeksi # Nuqtaning x1 koordinatasini olamiz x1 = log_or [i, 0] # i - satr, 0 - ustun # Nuqtaning x2 koordinatasini olamiz x2 = log_or [i, 1] # i - qator, 1 - ustun # vaznlar yig’indisi y = (w1*x1) + (w2*x2) if y >= bias: # Chegara qiymati oshib ketganda, chiqish - y = 1 bo'lishi kerak y = 1 # Maqsad Y va nuqta koordinatasini olamiz target_Y = log_or [i, 2] # i - qator, 2-ustun # Xatolik E = - (maqsad qiymati - neyron chiqishi) E = - (target_Y - y) # Vaznni x1 darajasida o’zgartamiz w1 - = lr * E * x1 # Vaznni x2 darajasida o’zgartamiz w2 - = lr * E * x2 else: # Chegara oshmaganida, chiqish - y = 0 bo'lishi kerak y = 0 # Maqsad Y va nuqta koordinatasini olamiz target_Y = log_or [i, 2] # i - qator, 2-ustun # Xatolik E = - (maqsad qiymati - neyron chiqishi) E = - (target_Y - y) # Vaznni x1 darajasida o’zgartamiz w1 - = lr * E * x1 # Vaznni x2 darajasida o’zgartamiz w2 - = lr * E * x2 # Ma'lumotlarning chiqishi to'g'ridan-to'g'ri tayyor print ('\ nOrgatilgan vaznlar:', '\ nw1 =', w1, '\ nw2 =', w2) print ('\ n mantiqiy funksiyasi (OR-YOKI) ni tekshirish:') print ('(0, 0,', int ((0 * w1 + 0 * w2)> = 3), ')') print ('(1, 0,', int ((1 * w1 + 0 * w2)> = 3), ')') print ('(0, 1,', int ((0 * w1 + 1 * w2)> = 3), ')') print ('(1, 1,', int ((1 * w1 + 1 * w2)> = 3), ')') Dastur natijasi: Dastlabki vaznlar: w1 = 3.611365134992452 w2 = 3.8646266194092878 O’qitilgan vaznlar: w1 = 3.61136513499 w2 = 3.86462661941 Mantiqiy funksiya (OR-YOKI) ni tekshirish: (0, 0, 0) (1, 0, 1) (0, 1, 1) (1, 1, 1) Agar ma'lumotlardan bitta kirishni qo'llagan holda o'quv jarayonini batafsil ko'rib chiqsak, biz quyidagi ko’rinishga ega bo’lamiz: 1) Kirish parametri faol (x = 1), neyron to'g'ri javob berdi (chegaradan oshib ketdi), lekin xatoga yo'l qo'ydi (y= 1, lekin Y= 0): Xatolik: E = - (Y - y) = - (0 - 1) = 1; Vaznni yangilashi: w = w - (E * x1) = w - 1 2) Kirish parametri faol emas (x = 0 ), neyron to'g'ri javob berdi (chegadan oshib ketdi), lekin xatoga yo'l qo'ydi (y = 1, lekin Y = 0 ): Xato: E = - (Y - y) = - (0 - 1) = 1; Og'irligi yangilanishi: w = w - (E * x1) = w - 0 = w Biz darhol xulosa qilamizki, nofaol kirish parametri bilan har qanday maqsad qiymatlari va neyron chiqishi uchun vazn koeffitsienti o'zgarmaydi. Shuning uchun, biz faol bo'lmagan yozuv bilan variantlarni ko'rib chiqmaymiz. 3) Kirish parametri faol (x = 1 ), neyron to'g'ri javob berdi (chegaradan oshib ketdi) va yanglishmadi (y = 1, lekin Y = 1 ): Xato: E = - (Y - y) = - (1 - 1) = 0; Vazn yangilanishi: w = w - (E * x1) = w - 0 = w 4) Kirish parametri faol (x = 1 ), neyron noto'g'ri javob berdi (chegara oshmadi) va yanglishmadi (y= 0 lekin Y = 0 ): Xato: E = - (Y - y) = - (0 - 0) = 0; Vazn yangilanishi: w = w - (E * x1) = w - 0 = w 5) Kirish parametri faol (x = 1 ), neyron noto'g'ri javob berdi (chegara oshmadi) va xato qildi (y = 0 lekin Y= 1 ): Xato: E = - (Y - y) = - (1 - 0) = -1; Vazn yangilanishi: w = w - (E * x1) = w + 1 = w + 1 Agar siz ushbu ma'lumotlarga diqqat bilan qarasangiz, quyidagi qoidani shakllantirishingiz mumkin: Agar bizning neyronimiz to'g'ri javob bergan bo'lsa (xato 0 ga teng), demak biz hech narsa qilmaymiz. Agar neyron to'g'ri javob bergan bo'lsa, lekin xatoga yo'l qo'ygan bo'lsa, biz uni buning uchun jazolashimiz kerak - bu signal o'tgan ulanishlarning vaznini kamaytirish uchun. Boshqacha qilib aytganda, hayajonlangan kirishlar bilan bog'liq vaznlar kamayadi. Agar neyron noto'g'ri javob bergan va xato qilgan bo'lsa, unda biz signal o'tgan barcha vaznlarni oshirishimiz kerak. Shunday qilib, biz, go'yo, tarmoqqa bunday ulanishlar va shuning uchun ular bilan bog'liq bo'lgan kirishlar to'g'ri ekanligini aytmoqdamiz. Ushbu qoida o'z nomiga ega - delta qoidasi. 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