TensorFlow është një mjet i gjithanshëm për të krijuar modele të mësimit të makinerive.
Në këtë postim, ne do të shikojmë se si të krijojmë një sistem të njohjes së fytyrës me TensorFlow, një kornizë e mësimit të makinerisë me burim të hapur. Ne do të shqyrtojmë proceset thelbësore në krijimin e një sistemi të suksesshëm të njohjes së fytyrës, nga mbledhja dhe përgatitja e të dhënave deri te trajnimi dhe vlerësimi i një modeli.
Do të merrni përvojë të dorës së parë me TensorFlow për të krijuar njohjen e fytyrës me ndihmën e copave të kodit dhe shembujve të botës reale. Jeni të mirëpritur të ndiqni ndërsa vazhdojmë.
Hyrje në TensorFlow
TensorFlow është një bibliotekë falas dhe me burim të hapur. Është një kuti veglash simbolike matematikore që përdor rrjedhën e të dhënave dhe programimin e diferencueshëm. Ju mund të trajtoni një sërë detyrash me të, duke përfshirë thellë Rrjeti nervoz trajnimit.
TensorFlow është i fuqishëm dhe i adaptueshëm. Po kështu, është një mjet i shkëlqyeshëm për zhvillimin dhe vendosja e modeleve të mësimit të makinerive. Ju mund të ndërtoni modele të ndërlikuara me disa shtresa dhe operacione tensor. Gjithashtu, modelet e para-ndërtuara në bibliotekë mund të rregullohen mirë për nevoja specifike.
Për më tepër, TensorFlow ka një komunitet të madh dhe në zgjerim të përdoruesve. Pra, ka një bollëk informacioni dhe ndihme për individët që janë të rinj në platformë.
TensorFlow është popullor për Mësimi makinë pjesërisht sepse siguron një rrjedhë pune nga fundi në fund. Pra, ju lehtë mund të ndërtoni, trajnoni dhe vendosni modele. Ai ofron mjete dhe strategji për përmirësimin dhe shkallëzimin e modeleve për t'iu përshtatur kërkesave specifike. Ai ndryshon nga përpunimi paraprak i të dhënave deri tek vendosja e modelit.
Çfarë është Njohja e Fytyrës?
Njohja e fytyrës është a vizion kompjuteri detyrë që identifikon identifikimin e një personi bazuar në fytyrën e tij. Kjo teknikë njeh tiparet e fytyrës, të tilla si forma dhe tekstura e syve, hundës dhe gojës.
Dhe, i krahason ato me një bazë të dhënash të fytyrave të njohura për të identifikuar një ndeshje. Njohja e fytyrës ka disa përdorime, duke përfshirë sistemet e sigurisë, organizimin e fotografive dhe vërtetimin biometrik.
Saktësia e algoritmeve të njohjes së fytyrës është rritur ndjeshëm vitet e fundit si rezultat i përparimeve në mësimin e makinerive.
Importimi i bibliotekave të nevojshme
Para se të fillojmë ndonjë gjë, ne duhet të importojmë bibliotekat e nevojshme për modelin tonë. Tensorflow (tf) importohet dhe përdoret për të krijuar dhe trajnuar modelin. <(p>
"Numpy" kryen llogaritjet matematikore dhe përpunimin e të dhënave.
"matplotlib.pyplot" importohet si plt dhe përdoret për hartimi dhe vizualizimi i të dhënave.
Së fundi, "fetch lfw people" importohet nga sklearn. grupet e të dhënave dhe përdoren për të ngarkuar grupin e të dhënave të njohjes së fytyrës. Ky funksion është pjesë e paketës së veglave të mësimit të scikit. Falë këtij funksioni, ne nuk na duhej të ngarkonim një grup tjetër të dhënash. Kjo është ndërtuar tashmë në scit-learn.
Dhe, ju jep akses në një gamë të gjerë të grupe të dhënash për mësimin e makinerive aplikacionet. Në këtë skenar, ne përdorim metodën fetch lfw people për të tërhequr grupin e të dhënave "Fytyrat e etiketuara në të egra" (LFW). Ai përfshin foto të fytyrave të njerëzve si dhe etiketat që shkojnë me ta.
Këto biblioteka janë kritike në zbatimin dhe vlerësimin e modelit tonë të njohjes së fytyrës.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Parapërpunimi dhe ngarkimi i grupit të të dhënave të njohjes së fytyrës
Në këtë pjesë, ne përdorim funksionin "fetch lfw people" për të përpunuar paraprakisht të dhënat e njohjes së fytyrës. Së pari, ne përdorim fetch lfw njerëz me opsionin "min fytyra për person=60". Kjo tregon se ne duam të përfshijmë vetëm persona në grupin e të dhënave që kanë të paktën 60 fotografi. Prandaj, ne sigurojmë që modeli ynë të ketë të dhëna adekuate për të mësuar. Gjithashtu, kjo ul rrezikun e përshtatjes së tepërt.
Të dhënat dhe etiketat nga objekti fytyrat më pas nxirren dhe u caktohen variablave X dhe y. X hol.
Tani jemi gati të trajnojmë modelin tonë të njohjes së fytyrës duke përdorur të dhëna dhe etiketa të parapërpunuara.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Ndarja e grupeve të trajnimit dhe testimit
Në këtë hap, ne ndajmë të dhënat tona të njohjes së fytyrës në dy gjysma duke përdorur metodën e ndarjes së testit të trenit nga përzgjedhja sklearn.model. Qëllimi i kësaj ndarjeje është të vlerësojë performancën e modelit tonë pas stërvitjes
Funksioni i ndarjes së testit të trenit pranon si hyrje të dhëna X dhe etiketat y. Dhe, i ndan ato në grupe trajnimi dhe testimi. Ne zgjedhim madhësinë e testit=0.2 në këtë shembull. Kjo nënkupton që 20% e të dhënave do të përdoren si grup testimi dhe 80% si grup trajnimi. Për më tepër, ne përdorim gjendjen e rastësishme=42 për të siguruar që të dhënat të ndahen në mënyrë të qëndrueshme sa herë që kryhet kodi.
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)
Përgatitja e të dhënave
Qëllimi i parapërpunimit të të dhënave është përgatitja e tyre për hyrje në model. Të dhënat përpunohen paraprakisht në këtë kod duke e ndarë secilën pikë të të dhënave me 255.
Çfarë na motivoi për ta arritur këtë? Normalizimi është një procedurë parapërpunimi që përdoret në mësimin e makinerive për të garantuar që të gjitha tiparet janë në të njëjtën shkallë. Në këtë skenar, pjesëtimi me 255 i shkallëzon të dhënat në një interval prej 0 deri në 1, që është një hap i zakonshëm i normalizimit të të dhënave të figurës.
Kjo përshpejton konvergjencën e modelit dhe mund të rrisë performancën e tij.
X_train = X_train / 255.0
X_test = X_test / 255.0
Krijimi i modalitetit
Ne duam të identifikojmë individin fytyra e të cilit shfaqet në një foto. Në këtë rast, ne do të përdorim një rrjet plotësisht të lidhur, i njohur shpesh si një rrjet i dendur. Është një rrjet nervor artificial që është përdorur për të krijuar modelin.
Rrjetet nervore artificiale janë modeluar sipas mënyrës se si funksionon dhe organizohet truri i njeriut. Ato përbëhen nga nyje ose neurone të përpunimit të informacionit që janë të lidhur. Çdo neuron në një shtresë në një rrjet të dendur është i lidhur me çdo neuron në shtresën mbi të.
Modeli ka katër shtresa në këtë kod. Për t'u futur në shtresën tjetër, të dhënat hyrëse rrafshohen në shtresën e parë në një grup njëdimensional. Në përputhje me rrethanat, neuronet 128 dhe 64 në dy shtresat e mëposhtme janë të lidhura plotësisht.
Funksioni i aktivizimit ReLU është një funksion unik aktivizimi i përdorur nga këto shtresa. Me këtë, ne mund ta bëjmë modelin të mësojë korrelacionet jolineare midis hyrjeve dhe daljeve. Shtresa e fundit përdor funksionin e aktivizimit softmax për të bërë parashikime. Dhe, është një shtresë plotësisht e lidhur me aq shumë neurone sa ka klasa të mundshme.
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')
])
Përpilimi i Modelit
Modeli përpilohet duke përdorur funksionin "përpilimi". Ne duhet të përgatisim modelin për trajnim. Pra, ne do të përcaktojmë optimizuesin, funksionin e humbjes dhe metrikat që do të përdoren për të vlerësuar modelin.
Gjatë trajnimit, optimizuesi është përgjegjës për ndryshimin e parametrave të modelit. Optimizuesi "adam" është një teknikë popullore e optimizimit të të mësuarit të thellë.
Ne përdorim funksionin e humbjes për të vlerësuar performancën e modelit në të dhënat e trajnimit. Për shkak se etiketat e synuara janë numra të plotë që pasqyrojnë klasën e imazhit dhe jo vektorë të koduar me një nxehtësi, funksioni i humbjes "kryqëntropia kategorike e rrallë" është i favorshëm.
Së fundi, ne përcaktojmë metrikat për të vlerësuar modelin, në këtë rast, "saktësinë".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Trajnim model
Ne do të përdorim funksionin "përshtatje" për të trajnuar modelin.
Ne do të ofrojmë të dhënat e trajnimit (treni X) dhe etiketat përkatëse (treni y), si dhe do të caktojmë numrin e epokave (përsëritjet) për të ekzekutuar si 10. Procedura e trajnimit modifikon peshat e modelit për të reduktuar humbjen (ndryshimi midis etiketat e parashikuara dhe reale) dhe përmirësojnë saktësinë e të dhënave të trajnimit.
model.fit(X_train, y_train, epochs=10)
Vlerësimi i modelit
Tani, ne duhet të vlerësojmë modelin e trajnuar në të dhënat e testit. Ne përdorim humbjen e testit dhe saktësia e testit përdoret për të vlerësuar performancën e modelit. Në testin X të të dhënave të testit dhe testin e etiketave y, duhet të thërrasim "funksionin model.vlerësimi"
Funksioni nxjerr saktësinë e testit dhe humbjen e testit. Variablat e testimit të humbjes dhe saktësisë së testit, përkatësisht, përmbajnë këto vlera. Së fundi, ne përdorim funksionin "print" për të nxjerrë saktësinë e testit.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Parashikimi i klasave dhe marrja e klasave të parashikuara
Duke përdorur modelin e trajnimit dhe të dhënat e provës, algoritmi bën parashikime. Kur të dhënat e testit kalojnë në metodën "model.predict", ajo nxjerr një sërë parashikimesh për secilën fotografi në grupin e testimit.
Emri i klasës së synuar për secilën fotografi merret më pas nga lista e "emrave të synuar" duke përdorur funksionin "np.argmax" për të identifikuar indeksin me probabilitetin më të madh të parashikuar. Ky indeks përdoret më pas për të përcaktuar klasën e parashikuar për çdo imazh.
Duke përdorur një kuptim të listës, të gjitha parashikimet në grupin e "parashikimeve" i nënshtrohen kësaj metode, duke rezultuar në listën e "klasave të parashikuara".
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Vizualizimi i parashikimeve
Tani mund të shohim se si duket modeli ynë.
Për të vlerësuar se sa mirë është modelja, do të shfaqen 10 fotot e para dhe parashikimet e tyre. Ai do t'i vizatojë fotot në shkallë gri dhe do të shfaqë klasën aktuale të imazhit dhe klasën e parashikuar nga modeli duke përdorur modulin matplotlib.pyplot.
Funksioni "imshow" përdoret nga cikli for për të vizatuar secilën nga 10 fotot e para të grupeve të testimit. Emrat e synimeve[y test[i]] dhe klasat e parashikuara[i] përdoren për të përcaktuar përkatësisht klasën aktuale dhe klasën e parashikuar të imazhit. Titujt e secilës parcelë tregohen më pas nga këto klasifikime.
Së fundi, grafiku shfaqet duke përdorur metodën 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()
Mbylle
TensorFlow ofron një mjedis të plotë dhe fleksibël për krijimin e modeleve të mësimit të makinerive.
Duke e rregulluar modelin për të përmbushur kërkesa të veçanta ose duke shtuar zhvillime të reja në mësimin e makinerive, saktësia e modelit mund të rritet edhe më tej.
TensorFlow dhe njohja e fytyrës ka të ngjarë të përdoren gjithnjë e më shumë në industri si sistemet e sigurisë, vërtetimi biometrik dhe kujdesi shëndetësor në të ardhmen. Së shpejti do të shohim risi magjepsëse.
Lini një Përgjigju