Teskari tarqalishli neyronlarni (kitobda 7-bob) kelgusi mavzuda kiritasizmi? Agar kelgusi mavzuga kiritmasangiz shu mavzuning oxiridan kiritish kerak
Download 1.22 Mb.
|
13-mavzu
A = 0,4
A koeffitsientining dastlabki qiymatini eslaylik: A_vis = A Keling, boshlang'ich satrning funksiyasini ko'rsataylik: chop etish ('Boshlang'ich satr:', A, '* X') Keling, o'quv jarayonining qiymatini ko'rsataylik: lr = 0,001 Davrlar sonini belgilaylik: davrlar = 3000 Epoch - bu o'quv tanlanmasi orqali o'tish sonining qiymati. Agar bizning tanlanmamizda to'qqizta ma'lumotlar to'plami mavjud bo'lsa, unda bitta davr barcha to'qqizta ma'lumotlar to'plamlari davridagi bitta o'tish hisoblanadi. Ma'lumotlar bazasini massivlar yordamida aniqlaylik. Keling, ikkita massiv yarataylik. Barcha kiritilgan ma'lumotlarni - x, bitta qatorga, ikkinchisida maqsadli qiymatlarni (javoblar) - Y qo'yamiz. Kirish ma'lumotlari qatorini yarataylik x: arr_x = [1, 2, 3, 3.5, 4, 6, 7.5, 8.5, 9] Maqsadli qiymatlar qatorini Y yarataylik (Y javoblar): arr_y = [2.4, 4.5, 5.5, 6.4, 8.5, 11.7, 16.1, 16.5, 18.3] Biz boshlangan davrdan boshlab oxirigacha kirish ma'lumotlari orqali ketma-ket ishlaydigan (len (arr)) diapazonidagi i uchun ichki davrni o'rnatdik. Va loop bilan - oralig'idagi e uchun (davrlar), biz shunchaki bunday ishlarning sonini (takrorlashni) ko'rsatamiz: oralig'idagi e (davrlar) uchun: i uchun oraliqda (len (arr)): Len (arr) funksiyasi massiv uzunligini qaytaradi, bizda esa to'qqizni qaytaradi. X kirish qiymatlari qatoridan nuqtaning x koordinatasini olamiz: x = arr_x [i] Va keyin biz chiziqli sinflagichdagi kabi davom etamiz: # Hisoblangan y, nuqta koordinatasini olamoz y = A * x # Maqsad Y, nuqta koordinatasini olamiz target_Y = arr_y [i] # Xatolik E = maqsad qiymati - neyron chiqishi E = target_Y - y # A + delta A = A qoidasiga muvofiq x koeffitsientini o’zgartamiz A + = lr * (E / x) Eslatib o'taman, dastur siklini bajarish jarayonida koeffitsientlarni o'zgartirish jarayoni o'quv jarayoni deb ataladi. Treningdan so'ng natijani namoyish etamiz: chop etish ('Tayyor qator: y =', A, '* X') Dasturning to'liq matni: # To'g'ri chiziqning nishab koeffitsientini istalgan raqam bilan boshlaymiz A = 0,4 A_vis = A # Nishabning boshlang'ich qiymatini eslaymiz # Dastlabki qatorning ma'lumotlar chiqishi chop etish ('Boshlang'ich satr:', A, '* X') # O’qish tezligi lr = 0,001 # Davrlar sonini o’rnatish davrlar = 3000 # Kiritilgan ma'lumotlar qatorini yaratish x arr_x = [1, 2, 3, 3.5, 4, 6, 7.5, 8.5, 9] # Maqsadli qiymatlar qatorini yaratish (Y javoblar) arr_y = [2.4, 4.5, 5.5, 6.4, 8.5, 11.7, 16.1, 16.5, 18.3] # Tanlanma bo'yicha ishlash oralig'idagi e (davrlar) uchun: for i i (len (arr_x)) qatorida: # len (arr) - funksiya qator uzunligini qaytaradi # Nuqtaning x koordinatasini olamiz x = arr_x [i] # Hisoblangan y, nuqta koordinatasini olamiz y = A * x # Maqsad Y, nuqta koordinatasini olamiz target_Y = arr_y [i] # Xatolik E = maqsad qiymati - neyron chiqishi E = target_Y - y # A + delta A = A qoidasiga muvofiq x koeffitsientini o’zgartamiz A + = lr * (E / x) # Ma'lumotlarning chiqishi to'g'ridan-to'g'ri tayyor chop etish ('Tayyor qator: y =', A, '* X') Uning ishining natijasi tugagan to'g'ri chiziqning funksiyasi bo'ladi: y = 2.0562708725692196 * X Aniqlik uchun o'quv to'plamidagi ma'lumotlarni y=2x funksiyasining qiymatlari yaqinida bo'lishi uchun aniq ko'rsatildi. Va neyronni o'qitgandan so'ng, biz ushbu qiymatga juda yaqin javob oldik. Grafikdagi barcha voqealarni to'g'ridan-to'g'ri Pythonda tasavvur qilish yaxshi bo'lar edi. Vizualizatsiya biz tezda nima qilayotganimiz va nimaga erishganimiz haqida umumiy ma'lumot olish imkonini beradi. Ushbu qobiliyatlarni amalga oshirish uchun biz Pythonning grafik imkoniyatlarini kengaytirishimiz kerak. Buning uchun dasturimizga boshqa dasturchilar tomonidan yozilgan qo'shimcha modulni, xususan ma'lumotlarni vizuallashtirish va funksiyalar uchun import qilish kerak. Quyida biz grafikalar bilan ishlash uchun kerakli paketni import qiladigan ko'rsatma keltirilgan: plpl sifatida import matplotlib. pyplot Bundan tashqari, biz Pythonga alohida oynada emas, balki bloknotimizda ko'rsatilishini qo'shimcha ravishda aytishimiz kerak. Bu ko'rsatma yordamida amalga oshiriladi: % matplotlib qatori Agar siz ushbu paketni dasturga yuklay olmasangiz, ehtimol uni tarmoqdan yuklab olish kerak. Buni Anaconda to'plami bilan birga o'rnatiladigan Anaconda Prompt orqali qulay tarzda amalga oshirish mumkin. Windows tizimi uchun Anaconda Prompt buyrug'ini kiriting: conda install matplotlib Va ko'rsatmalarga rioya qiling. Boshqa operatsion tizimlar uchun boshqa buyruq kerak bo'lishi mumkin. Endi biz ma'lumotlar va funksiyalarimizni grafik tarzda namoyish etishga to'liq tayyormiz. Kodni bajaramiz: plpl sifatida import matplotlib.pyplot % matplotlib qatori # Kirish ma'lumotlarini ko'rsatish funksiyasi def func_data (x_data): return [arr_y [i] for i in range (len (arr_y))] # Boshlang'ich chiziqni ko'rsatish funksiyasi def func_begin (x_begin): return [A_vis * i for i for x_begin] # Tugallangan to'g'ri chiziqni ko'rsatish funksiyasi def funksiya (x): return [A * i for i in x] # X kirish uchun qiymatlar x_data = arr_x # Boshlang'ich to'g'ri chiziqning X qiymatlari (qiymatlar oralig'i) x_begin = [i i uchun (0, 11) oralig'ida] Tayyorlashan to'g'ri chiziqning # X qiymatlari (qiymat oralig'i) x = [i i uchun (0, 11) oralig'ida] #x = np.arange (0,11,1) # Y qiymati bo'yicha qiymatlar y_data = func_data (x_data) Boshlang'ich chiziqning # Y qiymatlari y_begin = func_begin (x_begin) Tayyorlashan to'g'ri chiziqning # Y qiymatlari y = funksiya (x) # Grafik va raqamli koordinatalarga nomlarni o’rnatish plt.title ("Neyron") plt.xlabel ("X") plt.ylabel ("Y") # Kiritilgan ma'lumotlarga nomlar bering va to'g'ridan-to'g'ri plt.plot (x, y, label = 'Ma'lumotlarni kiritish', color = 'g') plt.plot (x, y, label = 'Tayyor qator', color = 'r') plt.plot (x, y, label = 'Bosh satr', color = 'b') plt.legend (loc = 2) #loc - ismning joylashuvi, 2 - burchakda o'ng tomonda # diametri 10 plt.scatter (x_data, y_data, color = 'g', s = 10) doiralari bilan ma'lumotlar nuqtalarini (x, y) ifodalaydi. # Boshlanish chizig'i plt.plot (x_begin, y_begin, 'b') # To'g'ridan-to'g'ri tugadi plt.plot (x, y, 'r') # Idrokni yaxshilash uchun fonda panjara plt.grid (To'g'ri, linestyle = '-', color = '0.75') # Grafikni ko'rsatish plt.show () Kod bajarilganda, ko'rsatilish natijasi quyidagicha bo'ladi: Dasturlar bilan manbalarni havolada topishingiz mumkin: https://github.com/CaniaCan/neuralmaster Olamizan natijani tavsiflashdan oldin, avval matplotlib paket kodimizning ishlashini tavsiflaymiz. Kirish ma'lumotlarini ko'rsatish funksiyalari - def func_data (x_data), def func_data (x_begin), def func_data (x), biz y koordinatalarini x qiymatlariga mos ravishda qaytaramiz. Keling, grafikani nomlaymiz - plt.title (), va raqamli koordinatalar - plt.xlabel (): plt.title ("Neyron") plt.xlabel ("X") plt.ylabel ("Y") Kiritilgan ma'lumotlarning nomlarini va to'g'ridan-to'g'ri plt.plot () ni o'rnatamiz, qavs ichida biz ism va rangni ko'rsatamiz, plt.legend (loc = 2) - bu nomlarning tekislikda joylashishini aniqlaydi: plt.plot (x, y, label = 'Ma'lumotlarni kiritish', color = 'g') plt.plot (x, y, label = 'Tayyor qator', color = 'r') plt.plot (x, y, label = 'Bosh satr', color = 'b') plt.legend (loc = 2) #loc - ismning joylashuvi, 2 - burchakda o'ng tomonda Tarqalish usuli tekislikda koordinatalari ko'rsatilgan nuqtalarni aks ettiradi: plt.scatter (x_data, y_data, color = 'g', s = 10) Qurilish usuli belgilangan nuqtalarda tekislikda tekis chiziqni ko'rsatadi: plt.plot (x, y, 'r') Va nihoyat, biz plt.show () buyrug'i bilan qilgan hamma narsani namoyish etamiz. Endi olamizan grafikani tahlil qilaylik. Moviy - dastlab hech qanday sinflashni amalga oshirmagan boshlang'ich chiziq belgilanadi. Treningdan so'ng A koeffitsientining qiymati = 2.05 ga yaqin stabillashadi. Agar y = Ax = 2.05 * x funksiyasining diagrammada qizil rang bilan belgilangan to'g'ri chizig'ini chizadigan bo'lsak, unda biz kirish ma'lumotlariga yaqin qiymatlarni olamiz (jadvaldagi yashil nuqtalar). Agar bizning o'qitilgan neyronimiz foydalanuvchi ma'lumotlariga to'g'ri javob bersa-chi? Agar siz qizil chiziq ustidagi hamma narsa turlarga tegishli bo'lsa - jirafalar, pastda esa timsohlarga tegishli bo'lsa: x = input ("X kengligi uchun qiymatni kiriting:") x = int (x) T = kirish ("Y balandligi uchun qiymatni kiriting:") T = int (T) y = A * x # Shart agar T & gt; y: chop etish ('Bu jirafa!') boshqa: print ('Bu timsoh!') Kirish funksiyasi - foydalanuvchi tomonidan kiritilgan qiymatni qabul qiladi. Va shartda aytilgan: agar maqsadli qiymat (foydalanuvchi tomonidan kiritilgan) neyron chiqqandan (qizil chiziqdan yuqori) javobdan kattaroq bo'lsa, unda biz bu jirafa ekanligimizni xabar qilamiz, aks holda biz timsoh ekanligimizni xabar qilamiz. . Qadriyatlarimizga kirgandan so'ng, biz javob olamiz: X: 4 kengligi uchun qiymatni kiriting Y balandligi qiymatini kiriting: 15 Bu jirafa! Endi biz o'zimizni tabriklashimiz mumkin! Bizning barcha ishlarimiz neyronning kirish qismiga ma'lumotlarni etkazib berish uchun qaynay boshladi, ularni o'zimiz tushunmasdan. Neyronning o'zi ularni sinflaydi va to'g'ri javob beradi. Agar bizning ishimizdagi harakatlarimiz shu kabi sinflarga qisqartirilgan bo'lsa, unda biz kofe uchun juda ko'p vaqtimiz, ijtimoiy tarmoqlarda juda muhim suhbatlarimiz va hattoki plyus o'ynashga vaqtimiz bor edi. Va bularning barchasi bilan siz ko'proq ish qilishingiz mumkin, albatta, bu bonuslar va ish haqining oshishi bilan mukofotlanishi kerak. 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