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.
Do'stlaringiz bilan baham: |