TensorFlow - bu mashinani o'rganish modellarini yaratish uchun ko'p qirrali vosita.
Ushbu postda biz TensorFlow, ochiq manbali mashinani o'rganish tizimi yordamida yuzni aniqlash tizimini qanday yaratishni ko'rib chiqamiz. Muvaffaqiyatli yuzni aniqlash tizimini yaratishda ma'lumotlarni yig'ish va tayyorlashdan modelni o'rgatish va baholashgacha bo'lgan muhim jarayonlarni ko'rib chiqamiz.
Kod parchalari va real misollar yordamida yuzni tanishni yaratish uchun TensorFlow bilan birinchi qo'l tajribaga ega bo'lasiz. Davom etishimiz uchun bizni kuzatib borishingiz mumkin.
TensorFlow-ga kirish
TensorFlow bu bepul va ochiq manbali kutubxona. Bu ma'lumotlar oqimi va differentsial dasturlashdan foydalanadigan ramziy matematik asboblar qutisi. U bilan bir qator vazifalarni, shu jumladan chuqurni ham hal qilishingiz mumkin neyron tarmoq ta'lim.
TensorFlow kuchli va moslashuvchan. Xuddi shunday, bu rivojlanish uchun ajoyib vosita va mashinani o'rganish modellarini qo'llash. Siz bir necha qatlamli va tenzor operatsiyalari bilan murakkab modellarni yaratishingiz mumkin. Shuningdek, kutubxonada oldindan tuzilgan modellar muayyan ehtiyojlar uchun nozik sozlanishi mumkin.
Bundan tashqari, TensorFlow juda katta va kengayib borayotgan foydalanuvchilar hamjamiyatiga ega. Shunday qilib, platformada yangi bo'lgan shaxslar uchun juda ko'p ma'lumot va yordam mavjud.
TensorFlow uchun mashhur kompyuterni o'rganish qisman, chunki u oxirigacha ish jarayonini ta'minlaydi. Shunday qilib, siz osongina modellarni qurishingiz, o'rgatishingiz va joylashtirishingiz mumkin. U muayyan talablarga mos keladigan modellarni takomillashtirish va masshtablash uchun vositalar va strategiyalarni taqdim etadi. Bu ma'lumotlarni oldindan qayta ishlashdan modelni joylashtirishgacha farq qiladi.
Yuzni tanish nima?
Yuzni tanib olish a kompyuterni ko'rish shaxsning yuziga qarab identifikatsiyasini aniqlaydigan vazifa. Ushbu uslub ko'zlar, burun va og'izning shakli va tuzilishi kabi yuz xususiyatlarini taniydi.
Va moslikni aniqlash uchun ularni ma'lum yuzlar ma'lumotlar bazasi bilan taqqoslaydi. Yuzni tanib olish xavfsizlik tizimlari, fotosuratlarni tashkil qilish va biometrik autentifikatsiyani o'z ichiga olgan bir nechta maqsadlarga ega.
So'nggi yillarda mashinani o'rganish sohasidagi yutuqlar natijasida yuzni aniqlash algoritmlarining aniqligi sezilarli darajada oshdi.
Kerakli kutubxonalarni import qilish
Biror narsani boshlashdan oldin, biz modelimiz uchun zarur bo'lgan kutubxonalarni import qilishimiz kerak. Tensorflow (tf) import qilinadi va modelni yaratish va o'qitish uchun ishlatiladi. <(p>
"numpy" matematik hisob-kitoblarni va ma'lumotlarni qayta ishlashni amalga oshiradi.
“matplotlib.pyplot” plt sifatida import qilinadi va uchun ishlatiladi ma'lumotlar diagrammasi va vizualizatsiya.
Nihoyat, “fetch lfw people” sklearn’dan import qilinadi. ma'lumotlar to'plami va yuzni aniqlash ma'lumotlar to'plamini yuklash uchun ishlatiladi. Bu funktsiya scikit-learn asboblar to'plamining bir qismidir. Ushbu funktsiya tufayli biz boshqa ma'lumotlar to'plamini yuklashimiz shart emas edi. Bu allaqachon sckit-learn-da qurilgan.
Va, bu sizga keng doiradagi kirish imkonini beradi mashinani o'rganish uchun ma'lumotlar to'plami ilovalar. Ushbu stsenariyda biz “Yovvoyi tabiatdagi etiketli yuzlar” (LFW) maʼlumotlar toʻplamini olish uchun fetch lfw people usulidan foydalanamiz. Unda odamlarning yuzlari fotosuratlari va ular bilan birga keladigan yorliqlar mavjud.
Ushbu kutubxonalar bizning yuzni aniqlash modelimizni amalga oshirish va baholashda muhim ahamiyatga ega.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Yuzni tanish ma'lumotlar to'plamini oldindan qayta ishlash va yuklash
Ushbu bo'limda biz yuzni aniqlash ma'lumotlarini qayta ishlash uchun "Fetch lfw people" funksiyasidan foydalanamiz. Birinchidan, biz “odam boshiga minimal yuzlar = 60” varianti bilan fetch lfw people dan foydalanamiz. Bu shuni ko'rsatadiki, biz ma'lumotlar to'plamiga kamida 60 ta fotosurati bo'lgan shaxslarni kiritmoqchimiz. Shunday qilib, biz modelimiz o'rganish uchun etarli ma'lumotlarga ega ekanligiga ishonch hosil qilamiz. Bundan tashqari, bu haddan tashqari moslashish xavfini kamaytiradi.
Keyin yuzlar ob'ektidan ma'lumotlar va teglar chiqariladi va X va y o'zgaruvchilarga tayinlanadi. X hol.
Endi biz oldindan ishlangan maʼlumotlar va teglar yordamida yuzni tanish modelimizni oʻrgatishga tayyormiz.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
O'quv va test to'plamlarini ajratish
Ushbu bosqichda biz sklearn.model tanlovidan poyezd testini ajratish usuli yordamida yuzni aniqlash ma’lumotlar to‘plamini ikkiga ajratdik. Ushbu bo'linishdan maqsad - treningdan so'ng modelimiz ish faoliyatini baholash
Poezd testini ajratish funktsiyasi kirish ma'lumotlari sifatida X va y yorliqlarini qabul qiladi. Va ularni o'quv va test to'plamlariga ajratadi. Ushbu misolda test hajmi=0.2 ni tanlaymiz. Bu shuni anglatadiki, ma'lumotlarning 20% test to'plami sifatida va 80% o'quv to'plami sifatida ishlatiladi. Bundan tashqari, kod har safar bajarilganda ma'lumotlar izchil bo'linishini ta'minlash uchun tasodifiy holat = 42 dan foydalanamiz.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Ma'lumotlarni tayyorlash
Ma'lumotlarni oldindan qayta ishlashdan maqsad uni modelga kiritish uchun tayyorlashdir. Ushbu kodda ma'lumotlar har bir ma'lumot nuqtasini 255 ga bo'lish orqali oldindan qayta ishlanadi.
Bunga erishishimizga bizni nima undadi? Normallashtirish - bu barcha xususiyatlar bir xil miqyosda bo'lishini kafolatlash uchun mashinani o'rganishda qo'llaniladigan oldindan ishlov berish jarayoni. Ushbu stsenariyda 255 ga bo'linish ma'lumotlarni 0 dan 1 gacha bo'lgan diapazonga o'tkazadi, bu odatiy rasm ma'lumotlarini normallashtirish bosqichidir.
Bu modelning konvergentsiyasini tezlashtiradi va uning ishlashini oshirishi mumkin.
X_train = X_train / 255.0
X_test = X_test / 255.0
Tartibni yaratish
Biz suratda yuzi ko'rinadigan shaxsni aniqlamoqchimiz. Bunday holda, biz ko'pincha zich tarmoq deb nomlanuvchi to'liq bog'langan tarmoqdan foydalanamiz. Bu modelni yaratish uchun ishlatilgan sun'iy neyron tarmoq.
Sun'iy neyron tarmoqlari inson miyasi qanday ishlashi va tashkil etilishidan keyin modellashtirilgan. Ular bir-biriga bog'langan axborotni qayta ishlash tugunlari yoki neyronlardan iborat. Zich tarmoqdagi qatlamdagi har bir neyron uning ustidagi qatlamdagi har bir neyron bilan bog'langan.
Ushbu kodda model to'rtta qatlamga ega. Keyingi qatlamga kirish uchun kirish ma'lumotlari birinchi qatlamda bir o'lchovli massivga tekislanadi. Quyidagi ikkita qatlamdagi 128 va 64 neyronlar mos ravishda to'liq bog'langan.
ReLU faollashtirish funktsiyasi bu qatlamlar tomonidan qo'llaniladigan noyob faollashtirish funktsiyasidir. Buning yordamida biz kirish va chiqish o'rtasidagi chiziqli bo'lmagan korrelyatsiyalarni o'rganish uchun modelni olishimiz mumkin. Oxirgi qatlam bashorat qilish uchun softmax faollashtirish funksiyasidan foydalanadi. Va bu potentsial sinflar mavjud bo'lgan ko'plab neyronlarga ega bo'lgan to'liq bog'langan qatlam.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
Modelni tuzish
Model “kompilyatsiya” funksiyasi yordamida tuzilgan. Trening uchun modelni tayyorlashimiz kerak. Shunday qilib, biz modelni baholash uchun ishlatiladigan optimallashtiruvchi, yo'qotish funktsiyasi va ko'rsatkichlarni aniqlaymiz.
Trening davomida optimallashtiruvchi model parametrlarini o'zgartirish uchun javobgardir. "Odam" optimallashtiruvchisi chuqur o'rganishni optimallashtirishning mashhur usulidir.
Trening ma'lumotlari bo'yicha modelning ishlashini baholash uchun biz yo'qotish funktsiyasidan foydalanamiz. Maqsadli teglar bitta issiq kodlangan vektorlar emas, balki tasvir sinfini aks ettiruvchi butun sonlar bo'lganligi sababli, "siyrak kategorik krossentropiya" yo'qotish funktsiyasi qulaydir.
Nihoyat, biz modelni baholash uchun ko'rsatkichlarni aniqlaymiz, bu holda "aniqlik".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Model tayyorlash
Modelni o'rgatish uchun biz "mos" funktsiyasidan foydalanamiz.
Biz trening maʼlumotlarini (X poezd) va tegishli teglarni (y poezd) taqdim etamiz, shuningdek, ishlash uchun davrlar (iteratsiyalar) sonini 10 ta qilib belgilaymiz. Trening jarayoni yoʻqotishlarni kamaytirish uchun model ogʻirliklarini oʻzgartiradi (oʻrtasidagi farq) bashorat qilingan va haqiqiy teglar) va ta'lim ma'lumotlarining aniqligini oshirish.
model.fit(X_train, y_train, epochs=10)
Modelni baholash
Endi biz o'qitilgan modelni test ma'lumotlari bo'yicha baholashimiz kerak. Biz test yo'qotilishidan foydalanamiz va test aniqligi modelning ishlashini baholash uchun ishlatiladi. Test ma'lumotlari X testida va test yorliqlari y testida biz "model.evaluate funktsiyasi" ni chaqirishimiz kerak.
Funktsiya sinov aniqligi va sinov yo'qotilishini chiqaradi. O'zgaruvchilar test yo'qolishi va test aniqligi mos ravishda ushbu qiymatlarni o'z ichiga oladi. Nihoyat, biz sinovning aniqligini chiqarish uchun "chop etish" funksiyasidan foydalanamiz.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Sinflarni bashorat qilish va bashorat qilingan darslarni olish
Trening modeli va test ma'lumotlaridan foydalanib, algoritm bashorat qiladi. Sinov ma'lumotlari "model.predict" usuliga o'tkazilganda, u test to'plamidagi har bir rasm uchun bir qator bashoratlarni chiqaradi.
Keyin har bir rasm uchun maqsadli sinf nomi “np.argmax” funksiyasidan foydalangan holda “maqsadli nomlar” roʻyxatidan olinadi. Keyinchalik bu indeks har bir tasvir uchun bashorat qilingan sinfni aniqlash uchun ishlatiladi.
Ro'yxatni tushunishdan foydalanib, "prognozlar" massividagi barcha bashoratlar ushbu usulga bo'ysunadi, natijada "bashorat qilingan sinflar" ro'yxati paydo bo'ladi.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Bashoratlarni vizualizatsiya qilish
Endi biz modelimiz qanday ko'rinishini ko'rishimiz mumkin.
Model qanchalik yaxshi ishlashini baholash uchun dastlabki 10 ta fotosurat va ularning bashoratlari ko'rsatiladi. U fotosuratlarni kulrang rangda chizadi va matplotlib.pyplot moduli yordamida tasvirning haqiqiy sinfini va model tomonidan bashorat qilingan sinfni ko'rsatadi.
“Imshow” funksiyasi dastlabki 10 ta test toʻplamining har bir fotosuratini chizish uchun for tsikli tomonidan qoʻllaniladi. Maqsad nomlari[y test[i]] va bashorat qilingan sinflar[i] mos ravishda tasvirning haqiqiy va bashorat qilingan sinfini aniqlash uchun ishlatiladi. Keyin har bir uchastkaning sarlavhalari ushbu tasniflar bilan ko'rsatiladi.
Nihoyat, plt.show() usuli yordamida syujet ko'rsatiladi.
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
Aylantirmoq
TensorFlow mashinani o'rganish modellarini yaratish uchun to'liq va moslashuvchan muhitni taklif etadi.
Modelni muayyan talablarga javob beradigan tarzda sozlash yoki mashinani o'rganishda yangi ishlanmalarni qo'shish orqali modelning aniqligini yanada oshirish mumkin.
TensorFlow va yuzni tanish kelajakda xavfsizlik tizimlari, biometrik autentifikatsiya va sog'liqni saqlash kabi sohalarda tobora ko'proq qo'llanilishi mumkin. Tez orada ajoyib yangiliklarni ko'ramiz.
Leave a Reply