TensorFlow як воситаи универсал барои сохтани моделҳои омӯзиши мошинист.
Дар ин паём, мо дида мебароем, ки чӣ гуна системаи шинохти чеҳра бо TensorFlow, чаҳорчӯбаи омӯзиши мошинҳои кушодаасосро эҷод кунем. Мо равандҳои муҳимро дар эҷоди системаи бомуваффақияти шинохти чеҳра, аз ҷамъоварӣ ва омода кардани маълумот то омӯзиш ва арзёбии модел баррасӣ хоҳем кард.
Шумо бо TensorFlow таҷрибаи дастӣ хоҳед гирифт, то шинохти чеҳраро бо ёрии пораҳои код ва мисолҳои воқеии ҷаҳон эҷод кунед. Хуш омадед, ки ҳангоми идомаи мо пайравӣ кунед.
Муқаддима ба TensorFlow
TensorFlow китобхонаи ройгон ва кушодаасос аст. Ин як қуттии абзори математикаи рамзӣ мебошад, ки ҷараёни додаҳо ва барномасозии дифференсиалиро истифода мебарад. Бо он шумо метавонед як қатор вазифаҳоро иҷро кунед, аз ҷумла чуқур шабакаи нейралӣ омӯзиш.
TensorFlow пурқувват ва мутобиқшаванда аст. Ба ҳамин монанд, он як воситаи бузург барои таҳия ва татбиқи моделҳои омӯзиши мошинсозӣ. Шумо метавонед моделҳои мураккабро бо якчанд қабатҳо ва амалиёти тензорӣ созед. Инчунин, моделҳои қаблан сохташуда дар китобхона метавонанд барои эҳтиёҷоти мушаххас дақиқ танзим карда шаванд.
Ғайр аз он, TensorFlow дорои ҷомеаи азим ва васеъшавандаи корбар аст. Ҳамин тавр, барои ашхосе, ки дар платформа нав ҳастанд, миқдори зиёди маълумот ва кӯмак мавҷуд аст.
TensorFlow маъмул аст омӯзиши машқҳо қисман аз он сабаб, ки он ҷараёни кории охири ба охирро таъмин мекунад. Ҳамин тавр, шумо метавонед ба осонӣ моделҳоро созед, таълим диҳед ва ҷойгир кунед. Он воситаҳо ва стратегияҳоро барои такмил ва миқёси моделҳо барои мувофиқ кардани талаботи мушаххас таъмин мекунад. Он аз коркарди пешакии маълумот то ҷобаҷогузории модел фарқ мекунад.
Шинохти чеҳра чист?
Шинохти чеҳра аст биниши компютерӣ вазифае, ки шахсияти шахсро аз рӯи чеҳраи онҳо муайян мекунад. Ин усул хислатҳои чеҳра, ба монанди шакл ва сохтори чашм, бинӣ ва даҳонро эътироф мекунад.
Ва он онҳоро бо махзани чеҳраҳои маълум барои муайян кардани мувофиқат муқоиса мекунад. Шинохти чеҳра дорои якчанд истифода аст, аз ҷумла системаҳои амниятӣ, ташкили аксҳо ва аутентификатсияи биометрӣ.
Дақиқии алгоритмҳои шинохти чеҳра дар солҳои охир дар натиҷаи пешрафтҳо дар омӯзиши мошинсозӣ ба таври назаррас афзоиш ёфтааст.
Ворид кардани китобхонаҳои зарурӣ
Пеш аз оғози кор, мо бояд китобхонаҳои барои модели мо заруриро ворид кунем. Tensorflow (tf) барои эҷод ва омӯзиши модел ворид ва истифода мешавад. <(с>
"numpy" ҳисобҳои математикӣ ва коркарди маълумотро иҷро мекунад.
"matplotlib.pyplot" ҳамчун plt ворид карда мешавад ва барои он истифода мешавад диаграммаи маълумот ва визуализатсия.
Ниҳоят, "барои одамон" аз склерн ворид карда мешавад. маҷмӯи додаҳо ва барои бор кардани маҷмӯи додаҳои шинохти чеҳра истифода мешаванд. Ин функсия як қисми абзори scikit-learn мебошад. Ба шарофати ин функсия ба мо лозим набуд, ки маҷмӯи додаҳои дигарро бор кунем. Ин аллакай дар sckit-learn сохта шудааст.
Ва он ба шумо имкон медиҳад, ки ба доираи васеи маҷмӯи маълумотҳо барои омӯзиши мошин барномаҳо. Дар ин сенария, мо усули fetch lfw people-ро барои дарёфти маҷмӯаи додаҳои "Чеҳраҳои нишонгузорӣ дар ваҳшӣ" (LFW) истифода мебарем. Он аз аксҳои чеҳраи одамон ва инчунин тамғакоғазҳое, ки бо онҳо ҳамроҳ мешаванд, иборат аст.
Ин китобхонаҳо дар татбиқ ва арзёбии модели шинохти чеҳраи мо аҳамияти муҳим доранд.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Коркарди пешакӣ ва боркунии маҷмӯи маълумотҳои шинохти чеҳра
Дар ин бахш, мо аз функсияи "fetch lfw people" истифода мебарем, то пеш аз коркарди маълумоти шинохти чеҳра. Аввалан, мо lfw одамонро бо интихоби "чеҳраҳои ҳадди ақал барои як шахс = 60" истифода мебарем. Ин нишон медиҳад, ки мо танҳо мехоҳем ба маҷмӯи маълумот шахсоне дохил кунем, ки ҳадди аққал 60 акс доранд. Аз ин рӯ, мо боварӣ дорем, ки модели мо барои омӯхтан маълумоти кофӣ дорад. Инчунин, ин хатари аз ҳад зиёд фишурданро коҳиш медиҳад.
Маълумот ва тамғакоғазҳо аз объекти чеҳраҳо баъдан истихроҷ карда, ба тағирёбандаҳои X ва y таъин карда мешаванд. X хол.
Ҳоло мо омодаем модели шинохти чеҳраи худро бо истифода аз додаҳо ва тамғакоғазҳои пешакӣ коркардшуда омӯзем.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Тақсим кардани маҷмӯаҳои омӯзишӣ ва санҷишӣ
Дар ин қадам, мо маҷмӯи маълумотҳои шинохти чеҳраи худро бо истифода аз усули тақсими санҷиши қатора аз интихоби sklearn.model ба ду қисм тақсим кардем. Ҳадафи ин тақсимот баҳодиҳии фаъолияти модели мо пас аз омӯзиш аст
Функсияи тақсимоти санҷиши қатора ҳамчун вуруди додаҳои X ва тамғакоғазҳои y қабул карда мешавад. Ва он онҳоро ба маҷмӯаҳои омӯзишӣ ва санҷишӣ тақсим мекунад. Мо дар ин мисол андозаи санҷишро = 0.2 интихоб мекунем. Ин маънои онро дорад, ки 20% маълумот ҳамчун маҷмӯи тестӣ ва 80% ҳамчун маҷмӯи омӯзиш истифода мешавад. Ғайр аз он, мо ҳолати тасодуфӣ = 42-ро истифода мебарем, то боварӣ ҳосил кунем, ки маълумот ҳар дафъа иҷро шудани код пайваста тақсим карда мешавад.
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)
Тайёр кардани маълумот
Мақсади коркарди пешакии маълумот омода кардани он барои ворид шудан ба модел мебошад. Маълумот дар ин код бо роҳи тақсим кардани ҳар як нуқтаи маълумот ба 255 коркард карда мешавад.
Чӣ моро водор кард, ки ба ин ноил гардем? Нормализатсия як раванди коркарди пешакӣ мебошад, ки дар омӯзиши мошинсозӣ истифода мешавад, то кафолат диҳад, ки ҳама хусусиятҳо дар як миқёс қарор доранд. Дар ин сенария, таќсим ба 255 миқёси маълумотро ба диапазони 0 то 1 таќсим мекунад, ки ин як қадами муқаррарии ба эътидол овардани маълумоти тасвир аст.
Ин конвергенсияи моделро суръат мебахшад ва метавонад самаранокии онро зиёд кунад.
X_train = X_train / 255.0
X_test = X_test / 255.0
Эҷоди режим
Мо мехоҳем шахсеро муайян кунем, ки чеҳрааш дар расм пайдо мешавад. Дар ин ҳолат, мо шабакаи пурра пайвастро истифода хоҳем кард, ки аксар вақт ҳамчун шабакаи зич маълум аст. Ин як шабакаи нейронҳои сунъӣ мебошад, ки барои сохтани модел истифода шудааст.
Шабакаҳои нейронии сунъӣ пас аз он ки майнаи инсон чӣ гуна кор мекунад ва ташкил карда мешавад, модел карда мешавад. Онҳо аз гиреҳҳои коркарди иттилоот ё нейронҳо иборатанд, ки ба ҳам пайвастанд. Ҳар як нейрон дар қабати шабакаи зич бо ҳар як нейрон дар қабати болоии он пайваст аст.
Модел дар ин код чор қабат дорад. Барои ворид шудан ба қабати оянда, маълумоти воридотӣ дар қабати якум ба массиви якченака ҳамвор карда мешавад. 128 ва 64 нейронҳо дар ду қабати зерин мутаносибан комилан пайвастанд.
Функсияи фаъолсозии ReLU як функсияи беҳамтои фаъолсозӣ мебошад, ки аз ҷониби ин қабатҳо истифода мешавад. Бо ин, мо метавонем моделро барои омӯхтани таносуби ғайрихаттӣ байни воридот ва натиҷаҳо ба даст орем. Дар қабати охирин функсияи фаъолсозии softmax барои пешгӯиҳо истифода мешавад. Ва он як қабати комилан пайвастшуда бо шумораи зиёди нейронҳо мебошад, ки синфҳои эҳтимолӣ мавҷуданд.
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')
])
Тартиб додани модел
Модел бо истифода аз функсияи "compile" тартиб дода мешавад. Мо бояд моделро барои таълим омода созем. Ҳамин тавр, мо оптимизатор, функсияи талафот ва ченакҳоро муайян хоҳем кард, ки барои арзёбии модел истифода мешаванд.
Ҳангоми омӯзиш, оптимизатор барои тағир додани параметрҳои модел масъул аст. Оптимизатори "адам" як усули маъмули оптимизатсияи омӯзиши амиқ аст.
Мо функсияи гумро барои арзёбии фаъолияти модел дар маълумоти омӯзишӣ истифода мебарем. Азбаски тамғакоғазҳои мақсаднок ададҳои бутун мебошанд, ки синфи тасвирро инъикос мекунанд, на векторҳои рамзии як-гарм, функсияи талафоти "кроссентропияи камёфт" мусоид аст.
Ниҳоят, мо ченакҳоро барои арзёбии модел муайян мекунем, дар ин ҳолат "дақиқӣ".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Омӯзиши намунавӣ
Мо барои омӯзонидани модел аз функсияи "мувофиқ" истифода хоҳем кард.
Мо маълумоти омӯзишӣ (X қатора) ва тамғакоғазҳои марбут (y қатора) пешниҳод хоҳем кард, инчунин шумораи давраҳо (итератсияҳо) -ро барои иҷро кардани 10 муқаррар мекунем. Тартиби омӯзиш вазнҳои моделиро барои кам кардани талафот (фарқи байни нишондоди пешбинишуда ва воқеӣ) ва дақиқии маълумоти омӯзишро беҳтар гардонед.
model.fit(X_train, y_train, epochs=10)
Арзёбии модел
Ҳоло, мо бояд модели омӯзонидашударо дар маълумоти санҷиш арзёбӣ кунем. Мо талафоти санҷишро истифода мебарем ва дақиқии санҷиш барои арзёбии кори модел истифода мешавад. Дар санҷиши маълумоти санҷишӣ X ва тамғакоғазҳои санҷишӣ y санҷиш, мо бояд "функсияи model.evaluate" -ро даъват кунем.
Функсия дақиқии санҷиш ва талафоти санҷишро медиҳад. Тағйирёбандаҳои талафоти санҷиш ва дақиқии санҷиш мутаносибан ин арзишҳоро дар бар мегиранд. Ниҳоят, мо функсияи "чоп"-ро барои баровардани дақиқии санҷиш истифода мебарем.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Пешгӯии дарсҳо ва гирифтани дарсҳои пешбинишуда
Бо истифода аз модели таълим ва маълумоти тестӣ, алгоритм пешгӯиҳо мекунад. Вақте ки маълумоти санҷишӣ ба усули "model.predict" интиқол дода мешавад, он як қатор пешгӯиҳо барои ҳар як тасвири маҷмӯи санҷишро мебарорад.
Номи синфи мавриди ҳадаф барои ҳар як расм пас аз рӯйхати "номҳои мақсаднок" бо истифода аз функсияи "np.argmax" барои муайян кардани шохис бо эҳтимолияти бештари пешбинишуда гирифта мешавад. Пас аз ин индекс барои муайян кардани синфи пешбинишуда барои ҳар як тасвир истифода мешавад.
Бо истифода аз фаҳмиши рӯйхат, ҳамаи пешгӯиҳо дар массиви "пешгӯиҳо" ба ин усул тобеъ карда мешаванд, ки дар натиҷа рӯйхати "синфҳои пешбинишуда" пайдо мешаванд.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Намоиши пешгӯиҳо
Мо ҳоло мебинем, ки модели мо чӣ гуна аст.
Барои муайян кардани он, ки модел то чӣ андоза хуб кор мекунад, 10 акси аввал ва пешгӯиҳои онҳо нишон дода мешаванд. Он аксҳоро бо ранги хокистарӣ тарҳрезӣ мекунад ва ҳам синфи воқеии тасвир ва ҳам синфи пешгӯии моделро бо истифода аз модули matplotlib.pyplot намоиш медиҳад.
Функсияи "imshow" аз ҷониби ҳалқаи for барои кашидани ҳар яке аз 10 акси аввалин маҷмӯи санҷишӣ истифода мешавад. Номҳои мақсаднок[y test[i]] ва синфҳои пешбинишуда[i] барои муайян кардани синфи воқеии тасвир ва синфи пешгӯишаванда истифода мешаванд. Пас аз ин, унвонҳои ҳар як қитъа бо ин таснифҳо нишон дода мешаванд.
Дар охир, сюжет бо усули plt.show() намоиш дода мешавад.
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()
Ба натиҷа расидан
TensorFlow барои эҷоди моделҳои омӯзиши мошинсозӣ муҳити мукаммал ва чандир пешниҳод мекунад.
Тавассути танзими дақиқи модел барои қонеъ кардани талаботи мушаххас ё илова кардани пешрафтҳои нав дар омӯзиши мошинсозӣ, дақиқии моделро боз ҳам бештар кардан мумкин аст.
TensorFlow ва шинохти чеҳра дар оянда бештар дар соҳаҳое ба мисли системаҳои амниятӣ, аутентификатсияи биометрӣ ва тандурустӣ истифода хоҳанд шуд. Мо ба наздикӣ навовариҳои ҷолибро хоҳем дид.
Дин ва мазҳаб