Dasturning to'liq matni:
np sifatida numpy-ni import qilish
# 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 tarmog'ining sinfini aniqlash
sinf neyron_Net:
# NTlarining vaznlarini boshlash
def __init __ (self, input_num, neuron_num, learningrate): # xususiyati (kirish soni, neyron soni)
# Vaznlar matrisi
# Vazn matritsasini tasodifiy ravishda -0,5 dan 0,5 gacha o’rnatish
self.weights = (np.random.rand (neyron_num, input_num) -0.5)
# O'qish tezligi parametrini o’rnatish
self.lr = o'rganish darajasi
o'tish
# Neyron tarmog'ini o'qitish usuli
def train (self, inputs_list, targets_list): # oladi (ma'lumotlar ro'yxati, javoblar)
# Kirishlar ro'yxatini vertikal qatorga o'tkazing. .T - transpozitsiya
inputs_x = np.array (inputs_list, ndmin = 2) .T # sonli matritsa
targets_Y = np.array (targets_list, ndmin = 2) .T # javob matritsasi: bu raqam nima
# Signallarni hisoblash
# Neyronlardagi signallarni hisoblang. Vaznlar yig’indisi.
x = np.dot (self.weights, input_x) # nuqta - matritsani ko'paytirish X = W * I = vaznlar * kirishlar
# Neyrondan chiqadigan signallarni hisoblang. Faollashtirish funksiyasi - sigmoid (x)
y = 1 / (1 + np.exp (-x))
# Xatolarni hisoblash
# Xatolik E = - (maqsad - haqiqiy qiymat)
E = - (maqsadlar_Y - y)
# Vaznni yangilang
# Har bir havola uchun vaznlarni o’zgartamiz
self.weights - = self.lr * np.dot ((E * y * (1.0 - y)), np.transpose (kirish_x))
o'tish
# Sinov qiymatini ishlatish usuli
def so'rovi (self, inputs_list): # O'zining sinov holatini qabul qiladi
# Kirishlar ro'yxatini vertikal 2 o'lchovli qatorga o'tkazing.
inputs_x = np.array (inputs_list, ndmin = 2) .T
# Neyronlardagi signallarni hisoblang. Vaznlar yig’indisi.
x = np.dot (o'z vaznlari, kirish_x)
# Neyrondan chiqadigan signallarni hisoblang. Sigmoid (x)
y = 1 / (1 + np.exp (-x))
qaytish y
# TARMOQ PARAMETRELARINI O’RNATISH
# Kirish ma'lumotlari soni, neyronlar
data_input = 15
ma'lumotlar_neuron = 2
# O'quv tezligi
o'rganish darajasi = 0,1
# NT nusxasini yaratish
n = neyron_Net (data_input, data_neuron, learningrate)
# Oqlash
# Davrlar sonini o’rnatish
davrlar = 40000
# O'quv tanlanmasi bo'yicha ishlang
oralig'idagi e (davrlar) uchun:
for training_data_list: men uchun:
# 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)
maqsadlar_Y = int (all_values [0]) # belgilarni int ga o'tkazish, 0 element - javob
# maqsadli natijalarni yaratish (kerakli yorliqdan tashqari 0,01, ya'ni 0,99)
maqsadlar_Y = np.zeros (data_neuron) + 0.01
# Y maqsadli qiymatini olamiz, (javob qaysi raqam ekanligi). all_values [0] - ushbu yozuv uchun maqsadli yorliq
if int (all_values [0]) <= 1: # target <= 1, chunki biz faqat 0 va 1 raqamlarini taniymiz.
maqsadlar_Y [int (all_values [0])] = 0,99
n.train (kirish_x, maqsadlar_Y) # bizning poezd usulimiz neyron tarmog'ini o'rgatishdir
# Chiqishdagi vaznlarning natijasi
chop etish ('Vaznlar: \ n', n. vaznlar)
# Keling, yana o’quv tanlanmasini ko'rib chiqaylik
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:])
# Tarmoq ishlaydi
chiqishlar = n.query (kirish_x)
chop etish (i [0], 'Ehtimollik: \ n', natijalar)
# Agar ehtimollik 0,5 dan katta bo'lsa va chiqish raqami javobga to'g'ri keladigan bo'lsa, unda biz tarmoq,
# o'ziga xos chiqishi bo'yicha, raqamni tanidi.
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:])
# Tarmoq ishlaydi
chiqishlar = n.query (kirish_x)
# eng yuqori indeks yorliqqa to'g'ri keladi
label = np.argmax (chiqishlar)
if [label]> 0.5 va int (all_values [0]) == yorliqlari:
chop etish (i [0], 'Bilasizmi?:', 'Ha!')
boshqa:
chop etish (i [0], 'Bilasizmi?:', 'Yo'q!')
# Sinov tanlanmasidan o'ting
t = 0 # Sinov tanlanmasi nol raqamli hisoblagich
t1 = 0 # Sinov tanlanmasi birligi raqamining hisoblagichi
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
# Tarmoq ishlaydi
chiqishlar = n.query (kirish_x)
# eng yuqori indeks yorliqqa to'g'ri keladi
label = np.argmax (chiqishlar)
agar t <= 6 bo'lsa:
print ('Men 0 -', t, '?' ni o'rganganim ehtimolligi, natijalar [yorliq])
boshqa:
t1 + = 1
chop etish ('Men 1 -', t1, '?' ni o'rganganim ehtimolligi, natijalar [yorliq])
t = 0 # Sinov tanlanmasi nol raqamli hisoblagich
t1 = 0 # Sinov tanlanmasi birligi raqamining hisoblagichi
# Agar ehtimollik 0,5 dan katta bo'lsa va chiqish raqami javobga to'g'ri keladigan bo'lsa, unda biz tarmoq,
# o'ziga xos chiqishi bo'yicha, raqamni tanidi.
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:])
# Tarmoq ishlaydi
chiqishlar = n.query (kirish_x)
# eng yuqori indeks yorliqqa to'g'ri keladi
label = np.argmax (chiqishlar)
t + = 1
if [label]> 0.5 va int (all_values [0]) == yorliqlari:
print (i [0], 'Aniqlanganmi ?:', t, 'Ha!')
boshqa:
t1 + = 1
print (i [0], 'Aniqlanganmi ?:', t1, 'Yo'q!')
Dastur natijasi:
Vazn koeffitsientlari:
[[0.55376239 -0.2659114 -0.55801795 1.63794241 -0.39180754 0.18253672 -1.86935497 -4.51957151 -1.10400713 3.68316632 -1.31690796 0.48928634 0.63951451 0.6593403 -3.74255197]
[-4.18510101 -3.35072555 -0.15142484 -0.89959198 -0.54914752 1.80364436 –2.10131379 -0.79061126 0.94477939 0.27198919 -0.42900452 0.13232677 –0.54182952 0.16586589 1.24938759]]
0 ehtimollik:
[[0.98282717]
[0.0018778]]
1 ehtimollik:
[[0.01110791]
[0.98279182]]
2 Ehtimollik:
[[0.01280932]
[0.00169931]]
3 Ehtimollik:
[[4.97172575e-05]
[2.29715820e-03]]
4 Ehtimollik:
[[0.00010462]
[0.0130299]]
5 ehtimollik:
[[0.00018235]
[0.00010789]]
6 Ehtimollik:
[[0.01247943]
[0.00070262]]
7 Ehtimollik:
[[0.01036096]
[0.01685072]]
8 Ehtimollik:
[[0.00498377]
[0.00085023]]
9 Ehtimollik:
[[0.01543393]
[0.00064968]]
0 Siz tanib oldingizmi?: Ha!
1 Siz tanidingizmi?: Ha!
2 Siz tanidingizmi?: Yo'q!
3 Siz tanidingizmi?: Yo'q!
4 Siz tanidingizmi?: Yo'q!
5 Siz tanidingizmi?: Yo'q!
6 Siz tanidingizmi?: Yo'q!
7 Siz tanidingizmi?: Yo'q!
8 Siz tanidingizmi?: Yo'q!
9 Siz tanidingizmi?: Yo'q!
1 - 0 ni tanish ehtimoli? [0.95590294]
2 - 0 ni tanish ehtimoli? [0.98378171]
3 - 0 ni tanish ehtimoli? [0.63522571]
4 - 0 ni tanish ehtimoli? [0.92786908]
5 - 0 ni tanish ehtimoli? [0.78988343]
6 - 0 ni tanish ehtimoli? [0.76715129]
1 - 1 ni tanish ehtimoli? [0.98163393]
2 - 1 ni tanish ehtimoli? [0.98125632]
3 - 1 ni tanish ehtimoli? [0.94877843]
4 - 1 ni tanish ehtimoli? [0.95536855]
5 - 1 ni tanish ehtimoli? [0.9817356]
6 - 1 ni tanish ehtimoli? [0.95543842]
1 - 0 ni tanidingizmi?: Ha!
2 - 0 ni tanidingizmi?: Ha!
3 - 0 ni tanidingizmi?: Ha!
4 - 0 ni tanidingizmi?: Ha!
5 - 0 ni tanidingizmi?: Ha!
6 - 0 ni tanidingizmi?: Ha!
7 - 1 ni tanidingizmi?: Ha!
8 - 1 ni tanidingizmi?: Ha!
9 - 1 ni tanidingizmi?: Ha!
10 -1 ni tanidingizmi?: Ha!
11 - 1ni tanidingizmi?: Ha!
12 - 1 ni tanidingizmi?: Ha!
Dastur kodini quyidagi havola orqali topishingiz mumkin:
Do'stlaringiz bilan baham: |