Teskari tarqalishli neyronlarni (kitobda 7-bob) kelgusi mavzuda kiritasizmi? Agar kelgusi mavzuga kiritmasangiz shu mavzuning oxiridan kiritish kerak


Download 1.22 Mb.
bet5/16
Sana01.04.2023
Hajmi1.22 Mb.
#1315959
1   2   3   4   5   6   7   8   9   ...   16
Bog'liq
13-mavzu

Dastur. Endi 0 dan 9 gacha bo'lgan barcha raqamlarni .csv kengaytmasi bilan alohida faylga yozamiz. Bu juda mashhur format bo'lib, u "Excel" kabi oddiy ofis to'plamida yaratilgan va bundan tashqari "Python" u bilan ishlashi mumkin.
Bizning o'quv tanlanmamiz quyidagicha bo'ladi:

Ko'rib turganingizdek, bu erda hamma narsa juda oddiy. Har bir satrda vergul bilan ajratilgan holda ma'lum bir raqam piksellarining qiymati 0 yoki 1ni yozamiz va ro'yxatning boshida bu raqam qanaqaligini ko’rsatamiz.


Endi test tanlanmasi uchun alohida fayl yaratamiz. Test tanlanma sifatida buzilgan nol raqamlarning oltita turini kiritamiz:

Dastlab, dasturga fayldan o'qitiladigam ma'lumotlarini yuklaylik:


# CSV formatidan o'quv ma'lumotlarini ro'yxatga yuklash va tayyorlash training_data = open ("Database / Data_train.csv", 'r') # 'r' - faylni o'qish uchun ochamiz
training_data_list = training_data.readlines () # readlines () - fayldagi barcha satrlarni train_data_list o'zgaruvchisiga o'qiydi
training_data.close () # CSV faylini yopamiz
Open () funksiyasi - faylni ochadi va uni ifodalovchi ob'ektni qaytaradi. Ushbu funksiya argumentlari quyidagilardir: faylimiz joylashgan yo'l (Database / Data_train.csv) va faylni ochish rejimi (bizning holatlarimizda 'r' -o'qish rejimi).
Sinov uchun ma'lumotlarni xuddi shu tarzda yuklaymiz:
# CSV formatidan ro'yxatga test ma'lumotlarini yuklash va tayyorlash
test_data = open ("Database / Data_test.csv", 'r') # 'r' - faylni o'qish uchun ochamiz
test_data_list = test_data.readlines () # CSV formatidan ro'yxatga test ma'lumotlarini yuklash va tayyorlash.
test_data.close () # CSV faylini yopamiz
Vazn koeffitsientlarining dastlabki qiymatlari har qanday qiymatlarni qabul qilishi mumkinligi sababli, soddalik uchun ularni boshida nol bilan belgilaymiz. Bizda 15 ta kirish mavjud bo'lganligi sababli, bizga 15 ta ulanish kerak bo’ladi. Ularni 15 nol elementli bir o'lchovli massiv sifatida yozamiz:
# Neyron vaznlarini belgilash
weights = np.zeros(15)
Numpy modulining zeros() usuli, qavs ichida ko'rsatilgan nolli qator elementlarning sonini hosil qiladi (argument).
Qolgan parametrlarni beramiz:
# O'qish tezligi
lr = 1
# Davrlar sonini o'rnatamiz
epochs = 1000
# Birlik faollashtirish funksiyasi uchun chegarani o'rnatamiz
bias = 3
Biz faqat 0 va 1 operatsiyalarini bajarganimiz sababli, biz o'qish tezligini birga tenglashtiramiz.
O'quv sikli:
# O'quv tanlanma bo'yicha ishlaymiz
for e in range(epochs):
for i in training_data_list:
# Raqamning kirish ma'lumotlarini olamiz
all_values = i.split(',') # split(',') - satrni belgilarga bo'ling, bu erda vergul "," bo'linadigan belgidir.
inputs_x = np.asfarray (all_values ​​[1:])
# Y maqsadli qiymatini olish (javob qaysi raqam ekanligi)
target_Y = int (all_values ​​[0]) # belgilarni int ga tarjima qilish, 0 element - javob
# Biz maqsadli natijani ikkilik shaklga o'tkazamiz. Biz faqat nol qiymatini qidirayotganimiz uchun, demak u faqat to'g'ri bo'ladi = 1.
# qolgan javoblar noto'g'ri bo'ladi, shuning uchun ular nolga aylanadi.
if target_Y == 0:
target_Y = 1
else:
target_Y = 0
# Vaznlar yig’indisi
y = np.sum(weights * inputs_x)
if y >= bias:
# Cegaraviy qiymatga teng yoki undan oshganda, chiqish - y = 1 bo'lishi kerak
y = 1
# Xatolik E = - (maqsad qiymati - neyron chiqishi)
E = - (target_Y - y)
# Har bir kirish uchun vaznni o’zgartirish(delta qoidasi)
weights -= lr * E * inputs_x
else:
# Cegaraviy qiymat oshmaganida, chiqish - y = 0 bo'lishi kerak
y = 0
# Xatolik E = - (maqsad qiymati - neyron chiqishi)
E = - (target_Y - y)
# Har bir kirish uchun vaznni o’zgartirish(delta qoidasi)
weights -= lr * E * inputs_x
Bu erda, sikl boshida, biz neyronning kirishida qabul qilish uchun ma'lumotlarni olamiz:
# Raqamning kirish ma'lumotlarini olish
all_values ​​= i.split (',') # split (',') - satrni belgilarga bo'ling, bu erda vergul "," bo'linadigan belgidir.
inputs_x = np.asfarray (all_values ​​[1:])
Split () usuli - satrlarni ro'yxatga ajratadi, bu jimlik qoidasi bo'yicha bo'shliqlarga bo'ladi. Uning argumentida - (',') ni belgilab, biz qatorlarni vergul bilan ajratilgan ro'yxatga ajratamiz. Keyin, ro'yxatning birinchi elementidan boshlab, ma'lumotlarni inputs_x o'zgaruvchiga yozamiz.
Xuddi shu tarzda, biz raqamlar qatorining nol manzilida saqlanadigan maqsad qiymatini olamiz:
# Y maqsadli qiymatini olish (javob qaysi raqam ekanligi)
target_Y = int (all_values ​​[0]) # belgilarni int ga tarjima qilish, 0 element - javob
Biz faqat nol sonini izlayotganimiz va 0 va 1 ikkilik qiymatlari bilan ishlayotganimiz sababli (y = 1) chiqishda to'g'ri javob nol elementi nolga teng bo'lgan raqam bo'ladi (ro'yxatdagi birinchi satr o'quv qiymatlari fayli nol raqamiga teng):
0 - 0111101101101111
Qaysi birini oddiy shart bilan bajarish oson:
# Biz maqsadli natijani ikkilik shaklga o'tkazamiz. Biz faqat nol qiymatini qidirayotganimiz uchun, demak u faqat to'g'ri bo'ladi = 1.
# qolgan javoblar noto'g'ri bo'ladi, shuning uchun ular nolga aylanadi.
if target_Y == 0:
target_Y = 1
else:
target_Y = 0
Keyinchalik, biz oldindan ma'lum bo'lgan usulda harakat qilamiz, vaznlar yig;indisini topamiz va faollashtirish funksiyasini hisobga olgan holda vazn koeffitsientlarini yangilaymiz:
# Vaznlar yig’indisi
y = np.sum(weights * inputs_x)
if y >= bias:
# Chegara qiymatga teng yoki undan oshganda, chiqish - y = 1 bo'lishi kerak
y = 1
# Xatolik E = - (maqsad qiymati - neyron chiqishi)
E = - (target_Y - y)
# Har bir kirish uchun vaznni o'zgartirish (delta qoidasi)
weights -= lr * E * inputs_x
else:
# Chegar qiymati oshmaganida, chiqish - y = 0 bo'lishi kerak
y = 0
# Xatolik E = - (maqsad qiymati - neyron chiqishi)
E = - (target_Y - y)
# Har bir kirish uchun vaznni o’zgartirish(delta qoidasi)
weights -= lr * E * inputs_x
Bizning neyronimiz "aql-idrok" ga ega ekanligiga va nol sonini qolganlardan ajrata olishiga ishonch hosil qilish uchun natijalarni konsolda aks ettiramiz:
# O’qitilgan vaznlarning natijasi
print ('Vaznlar: \ n', vaznlar)
for i in training_data_list:
all_values ​​= i.split (',') # split (',') - satrni belgilarga bo'ling, bu erda vergul "," bo'linadigan belgidir.
inputs_x = np.asfarray (all_values ​​[1:])
print (i [0], 'bu 0?', np.sum (weights * inputs_x)> = bias)
# Sinov tanlanmadan o'tish
t = 0 # Sinov tanlanmasidan nol raqamli hisoblagich
for i in test_data_list:
all_values ​​= i.split (',') # split (',') - satrni belgilarga bo'ling, bu erda vergul "," bo'linadigan belgidir.
inputs_x = np.asfarray (all_values ​​[1:])
t + = 1
print ('0 -', t, '?', np.sum (weights * inputs_x)> = bias)
Dasturning to'liq matni:
import numpy as np
# CSV formatidan ro'yxatga o'qitish ma'lumotlarini yuklash va tayyorlash
training_data = open ("Database / Data_train.csv", 'r') # 'r' - faylni o'qish uchun ochish
training_data_list = training_data.readlines () # readlines () - fayldagi barcha satrlarni train_data_list o'zgaruvchisiga o'qiydi
training_data.close () # CSV faylini yopish
# CSV formatidan ro'yxatga test ma'lumotlarini yuklash va tayyorlash
test_data = open ("Database / Data_test.csv", 'r') # 'r' - faylni o'qish uchun ochish
test_data_list = test_data.readlines () # CSV formatidan ro'yxatga test ma'lumotlarini yuklash va tayyorlash.
test_data.close () # CSV faylini yopish
# Neyron vaznlarini initsializatsiya qilish
vaznlar = np.zeros (15)
# O'qish tezlig
lr = 1
# Davrlar sonini o'rnatish
epochs = 1000
# Birlik faollashtirish funksiyasi uchun chegara o'rnatish
bias = 3
# O'quv tanlanmasi bo'yicha ishlash
for e in range(epochs):
for i in training_data_list:
# Raqamning kirish ma’lumotlarini olish
all_values ​​= i.split (',') # split (',') - satrni belgilarga bo'ling, bu erda vergul "," bo'linadigan belgidir.
inputs_x = np.asfarray (all_values ​​[1:])
# Y maqsadli qiymatini olamiz (javob qaysi raqam ekanligi)
target_Y = int (all_values ​​[0]) # belgilarni int ga tarjima qilish, 0 element – javob
# Biz maqsadli natijani ikkilik shaklga o'tkazamiz. Biz faqat nol qiymatini qidirayotganimiz uchun, demak u faqat to'g'ri bo'ladi = 1.
# qolgan javoblar noto'g'ri bo'ladi, shuning uchun ular nolga aylanadi.
if target_Y == 0:
target_Y = 1
else:
target_Y = 0
# Vaznlar yig’indisi
y = np.sum(weights * inputs_x)
if y >= bias:
# Cegaraga teng yoki undan oshganda, chiqish - y = 1 bo'lishi kerak
y = 1
# Xatolik E = - (maqsad qiymati - neyron chiqishi)
E = - (target_Y - y)
# Har bir kirish uchun vaznni o’zgartirish(delta qoidasi)
weights -= lr * E * inputs_x
else:
# Cheraviy qiymat oshmaganida, chiqish - y = 0 bo'lishi kerak
y = 0
# Xatolik E = - (maqsad qiymati - neyron chiqishi)
E = - (target_Y - y)
# Har bir kirish uchun vaznni o’zgartirish(delta qoidasi)
weights -= lr * E * inputs_x
# Chiqishdagi vaznlarning natijasi
print (‘Vaznlar: \ n’, vaznlar)
# Yana o’quv tanlanmasini ko'rib chiqamiz
for training_data_list: men uchun:
all_values ​​= i.split (',') # split (',') - satrni belgilarga bo'ling, bu erda vergul "," bo'linadigan belgidir.
inputs_x = np.asfarray (all_values ​​[1:])
print (i [0], 'bu 0?', np.sum (weights * inputs_x)> = bias)
# Sinov tanlanmasi bo’yicha o’tish
t = 0 # Sinov tanlanmasi nol raqamli hisoblagich
for i in test_data_list:
all_values ​​= i.split (',') # split (',') - satrni belgilarga bo'ling, bu erda vergul "," bo'linadigan belgidir.
inputs_x = np.asfarray (all_values ​​[1:])
t + = 1
print ('0 ni tanidi -', t, '?', np.sum (weights * inputs_x)> = bias)
Dastur natijasi:
Vazn koeffitsientlari:
[0. 0. -2. 3. 0. 2. 0. -7. -2. 3. 0. 1. 0. 0. -2.]
0 bu 0? To'g'ri
1 bu 0? Yolg'on
2 bu 0? Yolg'on
3 bu 0? Yolg'on
4 bu 0? Yolg'on
5 bu 0? Yolg'on
6 bu 0? Yolg'on
7 bu 0? Yolg'on
8 bu 0? Yolg'on
9 bu 0? Yolg'on
1 chi o ni tanidim? To'g'ri
2 chi o ni tanidim? To'g'ri
3 chi o ni tanidim? To'g'ri
4 chi o ni tanidim? To'g'ri
5 chi o ni tanidim? To'g'ri
6 chi o ni tanidim? To'g'ri
Ushbu va boshqa manbalarni quyidagi havolada topishingiz mumkin:

Download 1.22 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   16




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling