TensorFlow - гэта універсальны інструмент для стварэння мадэляў машыннага навучання.
У гэтай публікацыі мы разгледзім, як стварыць сістэму распазнання твараў з TensorFlow, фрэймворкам машыннага навучання з адкрытым зыходным кодам. Мы разгледзім асноўныя працэсы стварэння паспяховай сістэмы распазнавання твараў, ад збору і падрыхтоўкі даных да навучання і ацэнкі мадэлі.
Вы атрымаеце непасрэдны досвед працы з TensorFlow для стварэння распазнавання твараў з дапамогай фрагментаў кода і прыкладаў з рэальнага свету. Вы можаце сачыць за намі.
Увядзенне ў TensorFlow
TensorFlow - гэта бясплатная бібліятэка з адкрытым зыходным кодам. Гэта сімвалічны набор матэматычных інструментаў, які выкарыстоўвае паток даных і дыферэнцыраванае праграмаванне. З яго дапамогай можна вырашаць цэлы шэраг задач, у тым ліку глыбокіх нейронных сеткі навучання.
TensorFlow магутны і адаптаваны. Акрамя таго, гэта выдатны інструмент для развіцця і разгортванне мадэляў машыннага навучання. Вы можаце будаваць складаныя мадэлі з некалькімі слаямі і тэнзарнымі аперацыямі. Акрамя таго, загадзя створаныя мадэлі ў бібліятэцы можна наладзіць пад пэўныя патрэбы.
Акрамя таго, TensorFlow мае велізарную супольнасць карыстальнікаў, якая пашыраецца. Такім чынам, ёсць мноства інфармацыі і дапамогі для асоб, якія толькі пачалі карыстацца платформай.
TensorFlow папулярны для навучанне з дапамогай машыны збольшага таму, што ён забяспечвае скразны працоўны працэс. Такім чынам, вы можаце лёгка ствараць, навучаць і разгортваць мадэлі. Ён дае інструменты і стратэгіі для паляпшэння і маштабавання мадэляў у адпаведнасці з канкрэтнымі патрабаваннямі. Яна вар'іруецца ад папярэдняй апрацоўкі даных да разгортвання мадэлі.
Што такое распазнаванне твараў?
Распазнаванне твараў - гэта a машыннае зрок задача, якая ідэнтыфікуе асобу па твары. Гэтая тэхніка распазнае рысы твару, такія як форма і тэкстура вачэй, носа і рота.
І параўноўвае іх з базай дадзеных вядомых твараў, каб вызначыць супадзенне. Распазнаванне твараў мае некалькі варыянтаў выкарыстання, уключаючы сістэмы бяспекі, арганізацыю фатаграфій і біяметрычную аўтэнтыфікацыю.
Дакладнасць алгарытмаў распазнавання твараў істотна ўзрасла за апошнія гады ў выніку прарыву ў машынным навучанні.
Імпарт неабходных бібліятэк
Перш чым пачаць што-небудзь, нам трэба імпартаваць бібліятэкі, неабходныя для нашай мадэлі. Tensorflow (tf) імпартуецца і выкарыстоўваецца для стварэння і навучання мадэлі. <(p>
«numpy» выконвае матэматычныя вылічэнні і апрацоўку дадзеных.
«matplotlib.pyplot» імпартуецца як plt і выкарыстоўваецца для дыяграмы дадзеных і візуалізацыі.
Нарэшце, «fetch lfw people» імпартуецца з sklearn. набораў даных і выкарыстоўваецца для загрузкі набору даных распазнання твараў. Гэтая функцыя з'яўляецца часткай набору інструментаў scikit-learn. Дзякуючы гэтай функцыі нам не трэба было загружаць іншы набор даных. Гэта ўжо ўбудавана ў sckit-learn.
І гэта дае вам доступ да шырокага спектру наборы даных для машыннага навучання прыкладанняў. У гэтым сцэнарыі мы выкарыстоўваем метад fetch lfw people для атрымання набору даных «Labeled Faces in the Wild» (LFW). Ён уключае фатаграфіі твараў людзей, а таксама цэтлікі на іх.
Гэтыя бібліятэкі вельмі важныя для ўкаранення і ацэнкі нашай мадэлі распазнання твараў.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Папярэдняя апрацоўка і загрузка набору даных распазнання твараў
У гэтай частцы мы выкарыстоўваем функцыю «выбраць lfw людзей» для папярэдняй апрацоўкі даных распазнання твараў. Па-першае, мы выкарыстоўваем Fetch lfw людзей з опцыяй «мінімум твараў на чалавека=60». Гэта азначае, што мы жадаем уключыць у набор даных толькі людзей, якія маюць не менш за 60 фатаграфій. Такім чынам, мы гарантуем, што наша мадэль мае дастатковыя даныя для навучання. Акрамя таго, гэта зніжае небяспеку перападбору.
Затым даныя і цэтлікі з аб'екта faces здабываюцца і прысвойваюцца зменным 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% у якасці навучальнага набору. Акрамя таго, мы выкарыстоўваем random state=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')
])
Складанне мадэлі
Мадэль кампілюецца з дапамогай функцыі «кампіляваць». Трэба падрыхтаваць мадэль да навучання. Такім чынам, мы вызначым аптымізатар, функцыю страт і паказчыкі, якія будуць выкарыстоўвацца для ацэнкі мадэлі.
Падчас навучання зменай параметраў мадэлі займаецца аптымізатар. Аптымізатар «Адам» - папулярны метад аптымізацыі глыбокага навучання.
Мы выкарыстоўваем функцыю страт для ацэнкі прадукцыйнасці мадэлі на навучальных дадзеных. Паколькі мэтавыя пазнакі - гэта цэлыя лікі, якія адлюстроўваюць клас выявы, а не вектары, закадаваныя аднаразова, функцыя страт "разрэджанай катэгарыяльнай кросэнтрапіі" з'яўляецца спрыяльнай.
Нарэшце, мы вызначаем паказчыкі для ацэнкі мадэлі, у дадзеным выпадку «дакладнасці».
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Навучанне мадэлі
Мы будзем выкарыстоўваць функцыю «fit» для навучання мадэлі.
Мы будзем прадастаўляць навучальныя даныя (X-цягнік) і адпаведныя пазнакі (y-цягнік), а таксама ўсталёўваць колькасць перыядаў (ітэрацый) для выканання 10. Працэдура навучання змяняе вагавыя паказчыкі мадэлі, каб паменшыць страты (розніца паміж прадказаныя і рэальныя цэтлікі) і павысіць дакладнасць навучальных даных.
model.fit(X_train, y_train, epochs=10)
Ацэнка мадэлі
Цяпер нам трэба ацаніць навучаную мадэль на аснове тэставых дадзеных. Мы выкарыстоўваем тэставыя страты і тэставую дакладнасць, каб ацаніць прадукцыйнасць мадэлі. Для тэставых даных X test і тэставых цэтлікаў y test нам трэба выклікаць «функцыю 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 і распазнаванне твараў, верагодна, будуць усё часцей выкарыстоўвацца ў такіх галінах, як сістэмы бяспекі, біяметрычная аўтэнтыфікацыя і ахова здароўя. Неўзабаве мы ўбачым захапляльныя інавацыі.
Пакінуць каментар