FARG`ONA DAVLAT UNIVERSITETI MATEMATIKA VA INFORMATIKA FAKULTETI AMALIY MATEMATIKA VA INFORMATIKA KAFEDRASI Amaliy matematika va informatika yo`nalishi 19. 08 A guruh talabasi Rahmonov Xurshidbekning “Internet do`konlari uchun tovarlarni turlarga ajratishda neyron tarmoq loyihasini tuzish (kiyim-kechak savdosi)” mavzusidagi
BITIRUV MALAKAVIY ISHI
Rahbar: Axmedov Axrorjon
Farg`ona – 2023
Mundarija:
- Kirish
- BOB . NAZARIY QISM
- Neyron tarmoqlar qanday ishlaydi?
- Chuqur neyron tarmoq arxitekturasi
- Neyron tarmoqlarning qanday turlari mavjud?
- Neyron tarmoqlar qayerda ishlatiladi?
- Neyron tarmoqlar yordamida ma'lumotlarni tasniflash
- Neyron tarmoqdan klassifikator sifatida foydalanish xususiyatlari
- II BOB. ASOSIY QISM
- Tasvir tasnifi nima?
- Tasvirlarni tasniflash qanday ishlaydi?
- Tensorflow va keras kutubxonasi orqali tasvirlarni tasniflash haqida
- III BOB . DASTURIY QISM
- Keras va Tensorflow texnologiyalari asosidagi neyron tarmoqlardan foydalangan holda javonlarda tovarlarni tanib olish
- TensorFlow va Keras yordamida tasvir tasnifi
- Pythonda tensorflow va keras yordamida tasvir tasnifi
Kirish
Neyron tarmoq - bu biologik neyron tarmoqlarning ishlash tamoyillari asosida qurilgan dasturiy va apparat ta'minoti ko'rinishidagi matematik model. Neyron tarmoqlar ko'pincha qandaydir innovatsion texnologiya, kelajak dunyosining bir qismi sifatida qabul qilinadi. Biroq, bu sohadagi o'zgarishlar yarim asrdan ko'proq vaqt oldin boshlangan, garchi yutuq nisbatan yaqinda sodir bo'lgan. Dasturlashdan uzoq bo'lgan odamlar uchun neyron tarmoqning ishlashi mo''jizaga o'xshaydi va uning imkoniyatlari cheksiz ko'rinadi. Eng oddiy neytron tarmog'iga perseptron misol bo'la oladi.
Neyron tarmog'ining asosiy arxitekturasi
KIRISH QATLAMI
YASHIRIN QATLAM
CHIQISH QATLAMI
- Kirish qatlami
- Tashqi dunyo ma'lumotlari kirish qatlamidan sun'iy neyron tarmoqqa kiradi. Kirish tugunlari ma'lumotlarni qayta ishlaydi, tahlil qiladi yoki tasniflaydi va keyingi qatlamga o'tkazadi.
- Yashirin qatlam
- Yashirin qatlamlar kirish qatlamidan yoki boshqa yashirin qatlamlardan ma'lumot oladi. Sun'iy neyron tarmoqlar ko'p sonli yashirin qatlamlarga ega bo'lishi mumkin. Har bir yashirin qatlam oldingi qatlamning chiqishini tahlil qiladi, uni qayta ishlaydi va keyingi qatlamga o'tkazadi.
- Chiqish qatlami
- Chiqish qatlami barcha ma'lumotlarni sun'iy neyron tarmog'i tomonidan qayta ishlashning yakuniy natijasini beradi. U bir yoki bir nechta tugunlarga ega bo'lishi mumkin. Masalan, ikkilik tasniflash masalasini echishda (ha/yo'q) chiqish qatlami bitta chiqish tuguniga ega bo'ladi, bu esa "1" yoki "0" natijasini beradi.
Chuqur neyron tarmoq arxitekturasi ` Chuqur neyron tarmoqlari yoki chuqur o'rganish tarmoqlari bir-biriga ulangan millionlab sun'iy neyronlarga ega bo'lgan bir nechta yashirin qatlamlarga ega. Og'irlik deb ataladigan raqam bir tugunning boshqalarga ulanishini ko'rsatadi. Agar bitta tugun boshqasini qo'zg'atsa, vazn ijobiy yoki bir tugun boshqasini bostirsa salbiy. Og'irligi yuqori bo'lgan tugunlar boshqa tugunlarga ko'proq ta'sir qiladi.
Neyron tarmoqlarning qanday turlari mavjud? ` Neyron tarmoqni o'qitish - bu neyron tarmoqni vazifani bajarishga o'rgatish jarayoni. Neyron tarmoqlar birinchi navbatda etiketli yoki yorliqsiz bir nechta katta ma'lumotlar to'plamini qayta ishlash orqali o'rgatiladi. Ushbu misollarga asoslanib, tarmoqlar noma'lum kirishlarni aniqroq qayta ishlashlari mumkin.
Neyron tarmoq turlari Sun’iy intelektda asosan quydagi turlardan foydalaniladi:
- Feedforward (to’g’ridan aloqa) neyron tarmoqlari
- Takrorlanuvchi neyron tarmoqlar
- Feedforward neyron tarmoqlari - bu yaratilgan sun'iy neyron tarmoqlarining birinchi turi va bugungi kunda eng ko'p ishlatiladigan tarmoqlar deb hisoblash mumkin. Ushbu neyron tarmoqlari to’g’ri aloqa neyron tarmoqlari deb ataladi, chunki tarmoq orqali ma'lumot oqimi sikl (loop) o'tmasdan bir tomonlama bo'ladi.
- Takrorlanadigan neyron tarmoqlar (RNN), nomidan ko'rinib turibdiki, operatsiyalarning tsikl shaklida takrorlanishini o'z ichiga oladi. Ular oldingi tarmoqlarga qaraganda ancha murakkab va tasvirni asosiy tanib olishdan ko'ra murakkabroq vazifalarni bajara oladilar.
Tasvir tasnifi nima?
- Tasvirni kiritish vazifasi neyron tarmoq va uning ushbu rasm uchun qandaydir yorliq shaklini chiqarishi tasvirni aniqlash deb nomlanadi. Tarmoqning chiqish yorlig'i oldindan belgilangan sinfga mos keladi. Rasmga ko'plab sinflar yoki bittasi tayinlangan bo'lishi mumkin. Agar bitta sinf mavjud bo'lsa, "tan olish" atamasi tez-tez ishlatiladi, bir nechta sinflar mavjud bo'lsa, "tasniflash" atamasi tez-tez ishlatiladi.
- Rasmlarni tasniflash qanday ishlaydi?
- Piksel ko'rinishidagi tasvir kompyuter tomonidan tahlil qilinadi. Buni rasmni o'lchami tasvir o'lchamlari bilan belgilanadigan matritsalar to'plami sifatida ko'rib chiqish orqali amalga oshiradi. Oddiy qilib aytganda, rasm tasnifi - bu kompyuter nuqtai nazaridan algoritmlardan foydalangan holda statistik ma'lumotlarni o'rganish.
Neyron tarmoq arxitekturasi
- Chiqish qatlamidagi 10 ta neyron tasvirning u yoki bu sinfga tegishli bo'lish ehtimolini 0 dan 1 gacha beradi:
- Tensorflow va keras kutubxonasi orqali tasvirlarni tasniflash haqida
- TensorFlow - bu Google Brain jamoasi tomonidan Python uchun yaratilgan ochiq manbali kutubxona. TensorFlow ko'plab turli xil algoritmlar va modellarni tuzadi, bu foydalanuvchiga tasvirni aniqlash va tasniflash va tabiiy tilni qayta ishlash kabi vazifalarda foydalanish uchun chuqur neyron tarmoqlarni amalga oshirish imkonini beradi. TensorFlow - har biri matematik operatsiyani ifodalovchi bir qator ishlov berish tugunlarini amalga oshirish orqali ishlaydigan kuchli ramka va tugunlarning butun seriyasi "grafik" deb ataladi.
TensorFlow va Keras yordamida tasvir tasnifi
Tasvir tasnifini neyron tarmoqqa tasvirni kiritish va ushbu tasvirga teg belgilash sifatida tavsiflash mumkin. Neyron tarmoq tomonidan tanlangan yorliq siz oldindan belgilagan sinfga mos keladi. Rasmga bir yoki bir nechta teg tayinlanishi mumkin. Agar dastlab bitta yorliq aniqlangan bo'lsa, bu "tan olish" vazifasi bo'lar edi; agar vazifa bir nechta turdagi teglarni qidirishni o'z ichiga olsa, bu "tasniflash" vazifasi deb aytiladi.
Neyron tarmog'ining ishi quyidagi jarayonlardan iborat:
1) Filtrlar yordamida xususiyatni ajratib olish
2) Faollashtirish funktsiyalari
3) Qatlamlarni birlashtirish
4) Siqish
5) Qatlamlar to'plami
Yuqoridagi rasmga asosan, endi tasvirlarni tanish va turlarga ajratuvchi dasturni tuzaylik. Neyron tarmog'ini yaratish uchun biz python va TensorFlow kutubxonasidan foydalanamiz.
Ishlash uchun bizga quyidagi kutubxonalar kerak:
- numpy (buyruqlar qatorida biz yozamiz: pip install numpy)
- matplotlib (buyruqlar qatorida biz yozamiz: pip install matplotlib)
- keras (buyruqlar qatorida biz yozamiz: pip install keras)
- jupyter (buyruqlar qatorida biz yozamiz: pip install jupyter)
- Pip yordamida: buyruq satrida biz pip install tensorflow yozamiz
- Agar siz xatoga yo'l qo'ysangiz, .whl faylini yuklab olishingiz va pip bilan o'rnatishingiz mumkin: pip install filepath\filename.whl
- qoʻllanmasi (ingliz tilida)
- Biz Jupyterni boshlaymiz. Buyruqlar satrida ishlash uchun biz jupyter daftarini yozamiz.
Ishning boshlanishi
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
Ushbu oʻquv qoʻllanmada 10 toifadagi 70 000 ta kulrang rangdagi tasvirlarni oʻz ichiga olgan Fashion MNIST maʼlumotlar toʻplamidan foydalaniladi. Rasmlarda kiyimning alohida qismlari past o'lchamdagi (28x28 piksel) ko'rsatilgan:
Tarmoqni o'rgatish uchun 60 000 ta tasvirdan va tarmoq tasvirlarni tasniflashni qanchalik aniq o'rganganligini baholash uchun 10 000 ta tasvirdan foydalanamiz. Siz shunchaki ma'lumotlarni import qilish va yuklash orqali TensorFlow-dan Fashion MNIST-ga kirishingiz mumkin:
- fashion_mnist = keras.datasets.fashion_mnist
- (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
- Ma'lumotlar to'plamini yuklash to'rtta NumPy massivlarini qaytaradi:
- train_images va train_labels massivlari model o'qitish uchun foydalanadigan ma'lumotlardir
- Test_images va test_labels massivlari modelni sinab ko'rish uchun ishlatiladi.
Sinf nomlari ma'lumotlar to'plamiga kiritilmagan, shuning uchun biz uni o'zimiz yozamiz:
Ma'lumotlarni o'rganish
Modelni o'rgatishdan oldin ma'lumotlar to'plami formatini ko'rib chiqish.
train_images.shape # O'quv to'plamida 60 000 ta rasm mavjud, har bir rasm 28 x 28 piksel sifatida taqdim etilgan
test_images.shape # Sinov to'plamida 10 000 ta rasm mavjud, har bir rasm 28 x 28 piksel sifatida taqdim etilgan
len(train_labels) # Trening to'plamida 60 000 yorliq mavjud
Ma'lumotlarni oldindan qayta ishlash Modelni tayyorlashdan oldin ma'lumotlarni oldindan qayta ishlash kerak. Agar biz o'quv to'plamidagi birinchi rasmni tekshirsangiz, piksel qiymatlari 0 dan 255 gacha ekanligini ko'rishimiz mumkin: plt.figure() plt.imshow(train_images[0]) plt.colorbar() plt.grid(False)
Model qurish
Neyron tarmoqni qurish model qatlamlarini o'rnatishni talab qiladi.
Neyron tarmoqning asosiy qurilish bloki qatlamdir. Chuqur o'rganishning ko'p
qismi o
ddiy qatlamlarni birlashtirishdan iborat. Ko'pgina qatlamlar, masalan,
tf.keras.layers.Dense, o'quv jarayonida o'rganiladigan parametrlarga ega.
model = keras.Sequential([
)),
28
,
28
keras.layers.Flatten(input_shape=(
keras.layers.Dense(
128
, activation=tf.nn.relu),
ke
ras.layers.Dense(
10
, activation=tf.nn.softmax)
])
Model tayyorlash
Treningni boshlash uchun model.fit usulini chaqiriladi:
model.fit(train_images, train_labels, epochs=
5
)
Endi, 0
-
rasmni, bashoratlarni va bashoratlar ma
jmuasini ko'rib chiqaylik.
i =
2
,
3
plt.figure(figsize=(
6
))
plt.subplot(
1
,
2
,
1
)
plot_image(i, predictions, test_labels, test_images)
)
2
,
2
plt.subplot(
1
,
plot_value_array(i, predictions, test_labels)
Endi, ularning bashoratlari bilan bir nechta tasvirlarni yarataylik. To'g'ri bashorat yorliqlari ko'k va noto'g'ri bashorat yorliqlari qizil rangda. E'tibor bering, u juda ishonchli bo'lsa ham, bu to'g'ri bo'lmasligi mumkin.
num_rows =
9
num_cols =
12
num_images = num_rows*num_cols
*n
plt.figure(figsize=(
2
*
2
*num_rows))
2
um_cols,
in
range
for
i
(num_images):
plt.subplot(num_rows,
2
*num_cols,
2
*i+
1
)
plot_image(i, predictions, test_labels, test_images)
2
plt.subplot(num_rows,
)
2
*i+
2
*num_cols,
plot_value_array(i, predictions, test_labels)
E ‘TIBORINGIZ UCHUN RAHMAT!