TensorFlow yra universalus įrankis mašininio mokymosi modeliams kurti.
Šiame įraše apžvelgsime, kaip sukurti veido atpažinimo sistemą naudojant TensorFlow – atvirojo kodo mašininio mokymosi sistemą. Apžvelgsime esminius procesus kuriant sėkmingą veido atpažinimo sistemą – nuo duomenų rinkimo ir paruošimo iki modelio mokymo ir įvertinimo.
Įgysite tiesioginės patirties su TensorFlow, kad sukurtumėte veido atpažinimą naudodami kodo fragmentus ir realius pavyzdžius. Kviečiame sekti, kaip mes tęsiame.
„TensorFlow“ įvadas
TensorFlow yra nemokama atvirojo kodo biblioteka. Tai simbolinis matematikos įrankių rinkinys, kuriame naudojamas duomenų srautas ir diferencijuotas programavimas. Su juo galite atlikti įvairias užduotis, įskaitant gilias neuroninis tinklas mokymas.
TensorFlow yra galingas ir pritaikomas. Taip pat tai puiki priemonė tobulėti ir diegti mašininio mokymosi modelius. Galite sukurti sudėtingus modelius su keliais sluoksniais ir tenzorinėmis operacijomis. Be to, iš anksto sukurti modeliai bibliotekoje gali būti tiksliai suderinti pagal specifinius poreikius.
Be to, TensorFlow turi didžiulę ir besiplečiančią vartotojų bendruomenę. Taigi, yra daugybė informacijos ir pagalbos tiems, kurie platformos naujokai naudojasi.
TensorFlow yra populiarus mašininis mokymasis iš dalies todėl, kad tai užtikrina visišką darbo eigą. Taigi galite lengvai kurti, mokyti ir įdiegti modelius. Jame pateikiami įrankiai ir strategijos modeliams tobulinti ir keisti, kad atitiktų konkrečius poreikius. Tai skiriasi nuo išankstinio duomenų apdorojimo iki modelio diegimo.
Kas yra veido atpažinimas?
Veido atpažinimas yra a kompiuterio vizija užduotis, pagal kurią nustatoma asmens tapatybė pagal veidą. Ši technika atpažįsta veido bruožus, tokius kaip akių, nosies ir burnos forma ir tekstūra.
Ir lygina juos su žinomų veidų duomenų baze, kad nustatytų atitiktį. Veido atpažinimas gali būti naudojamas įvairiais būdais, įskaitant apsaugos sistemas, nuotraukų organizavimą ir biometrinį autentifikavimą.
Veido atpažinimo algoritmų tikslumas pastaraisiais metais labai padidėjo dėl mašininio mokymosi proveržių.
Būtinų bibliotekų importavimas
Prieš ką nors pradėdami, turime importuoti mūsų modeliui reikalingas bibliotekas. Tensorflow (tf) importuojamas ir naudojamas modeliui kurti ir mokyti. <(p>
„numpy“ atlieka matematinius skaičiavimus ir duomenų apdorojimą.
„matplotlib.pyplot“ importuojamas kaip plt ir naudojamas duomenų diagramos ir vizualizacijos.
Galiausiai „fetch lfw people“ importuojamas iš sklearn. duomenų rinkinius ir naudojamas veido atpažinimo duomenų rinkiniui įkelti. Ši funkcija yra scikit-learn įrankių rinkinio dalis. Dėl šios funkcijos mums nereikėjo įkelti kito duomenų rinkinio. Tai jau sukurta naudojant sckit-learn.
Ir tai suteikia jums prieigą prie plataus asortimento mašininio mokymosi duomenų rinkiniai programos. Šiame scenarijuje naudojame metodą „Ftch lfw people“, kad gautume „Labed Faces in the Wild“ (LFW) duomenų rinkinį. Ją sudaro žmonių veidų nuotraukos ir su jais susijusios etiketės.
Šios bibliotekos yra labai svarbios įgyvendinant ir įvertinant mūsų veido atpažinimo modelį.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Veido atpažinimo duomenų rinkinio išankstinis apdorojimas ir įkėlimas
Šioje dalyje mes naudojame funkciją „Ftch lfw people“ iš anksto apdoroti veido atpažinimo duomenis. Pirmiausia naudojame parinktį „Ftch lfw people“ su parinktimi „min veidų vienam asmeniui = 60“. Tai reiškia, kad į duomenų rinkinį norime įtraukti tik tuos asmenis, kurie turi bent 60 nuotraukų. Taigi užtikriname, kad mūsų modelyje būtų pakankamai duomenų, kad būtų galima mokytis. Be to, tai sumažina permontavimo pavojų.
Duomenys ir etiketės iš objekto veidai išgaunami ir priskiriami kintamiesiems X ir y. X hol.
Dabar esame pasirengę apmokyti savo veido atpažinimo modelį naudodami iš anksto apdorotus duomenis ir etiketes.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Mokymo ir testų rinkinių padalijimas
Šiame žingsnyje savo veido atpažinimo duomenų rinkinį padalijame į dvi dalis naudodami traukinio testo padalijimo metodą iš sklearn.model pasirinkimo. Šio padalijimo tikslas – įvertinti mūsų modelio našumą po treniruotės
Traukinio bandymo padalijimo funkcija kaip įvesties duomenis priima X duomenis ir žymes y. Ir suskirsto juos į treniruočių ir testų rinkinius. Šiame pavyzdyje pasirenkame testo dydį = 0.2. Tai reiškia, kad 20 % duomenų bus naudojami kaip bandymų rinkinys ir 80 % kaip mokymo rinkinys. Be to, mes naudojame atsitiktinę būseną = 42, kad užtikrintume, jog duomenys būtų nuosekliai dalijami kiekvieną kartą atliekant kodą.
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)
Duomenų paruošimas
Išankstinio duomenų apdorojimo tikslas – paruošti juos įvedimui į modelį. Duomenys iš anksto apdorojami šiame kode, kiekvieną duomenų tašką padalijus iš 255.
Kas paskatino mus tai pasiekti? Normalizavimas yra išankstinio apdorojimo procedūra, naudojama mašininiame mokyme, siekiant užtikrinti, kad visos funkcijos būtų vienodos. Pagal šį scenarijų, padalijus iš 255, duomenys išskaidomi iki diapazono nuo 0 iki 1, o tai yra įprastas vaizdo duomenų normalizavimo veiksmas.
Tai pagreitina modelio konvergenciją ir gali padidinti jo našumą.
X_train = X_train / 255.0
X_test = X_test / 255.0
Režimo kūrimas
Norime nustatyti asmenį, kurio veidas yra paveikslėlyje. Tokiu atveju naudosime visiškai prijungtą tinklą, dažnai žinomą kaip tankus tinklas. Tai dirbtinis neuroninis tinklas, kuris buvo naudojamas modeliui sukurti.
Dirbtiniai neuroniniai tinklai modeliuojami pagal tai, kaip veikia ir yra organizuotos žmogaus smegenys. Jie sudaryti iš informacijos apdorojimo mazgų arba neuronų, kurie yra susieti. Kiekvienas sluoksnio neuronas tankiame tinkle yra susietas su kiekvienu virš jo esančiame sluoksnyje esančiu neuronu.
Šiame kode modelis turi keturis sluoksnius. Kad būtų įvesti į kitą sluoksnį, įvesties duomenys pirmame sluoksnyje suplokštinami į vienmatį masyvą. Atitinkamai, 128 ir 64 neuronai kituose dviejuose sluoksniuose yra visiškai susieti.
ReLU aktyvinimo funkcija yra unikali šių sluoksnių naudojama aktyvinimo funkcija. Taip galime pasiekti, kad modelis išmoktų netiesines koreliacijas tarp įvesties ir išvesties. Paskutiniame sluoksnyje prognozėms atlikti naudojama „softmax“ aktyvinimo funkcija. Ir tai yra visiškai sujungtas sluoksnis su tiek neuronų, kiek yra potencialių klasių.
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')
])
Modelio sudarymas
Modelis kompiliuojamas naudojant „kompiliavimo“ funkciją. Turime paruošti modelį mokymui. Taigi, apibrėžsime optimizatorių, nuostolių funkciją ir metriką, kurios bus naudojamos modeliui įvertinti.
Mokymų metu optimizatorius yra atsakingas už modelio parametrų keitimą. „Adamo“ optimizavimo priemonė yra populiari giluminio mokymosi optimizavimo technika.
Mes naudojame praradimo funkciją, kad įvertintume modelio veikimą pagal mokymo duomenis. Kadangi tikslinės etiketės yra sveikieji skaičiai, atspindintys vaizdo klasę, o ne vienkartiniai užkoduoti vektoriai, „retos kategoriškos kryžminės entropijos“ praradimo funkcija yra palanki.
Galiausiai apibrėžiame metriką, kad įvertintume modelį, šiuo atveju „tikslumą“.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Modelių mokymas
Modeliui apmokyti naudosime funkciją „fit“.
Pateiksime treniruočių duomenis (X traukinys) ir susijusias etiketes (y traukinys), taip pat nustatysime, kad epochų (iteracijų) skaičius būtų 10. Treniruotės procedūra modifikuoja modelio svorius, kad sumažintų nuostolius (skirtumą tarp prognozuojamos ir tikros etiketės) ir pagerina treniruočių duomenų tikslumą.
model.fit(X_train, y_train, epochs=10)
Modelio įvertinimas
Dabar turime įvertinti apmokytą modelį pagal bandymo duomenis. Mes naudojame bandymo nuostolius, o testo tikslumas naudojamas modelio veikimui įvertinti. Bandymo duomenims X test ir bandymo etiketėse y test turime iškviesti „funkciją model.evaluate“.
Funkcija išveda bandymo tikslumą ir bandymo nuostolius. Atitinkamai kintamieji testo nuostoliai ir bandymo tikslumas turi šias reikšmes. Galiausiai mes naudojame funkciją „spausdinti“, kad išvestume bandymo tikslumą.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Kursų numatymas ir nuspėjamų pamokų gavimas
Naudodamas mokymo modelį ir testo duomenis, algoritmas daro prognozes. Kai bandymo duomenys perduodami „model.predict“ metodui, jis pateikia prognozių masyvą kiekvienai bandymo rinkinio nuotraukai.
Tada kiekvienos nuotraukos tikslinės klasės pavadinimas išgaunamas iš „tikslinių pavadinimų“ sąrašo, naudojant funkciją „np.argmax“, kad būtų galima nustatyti indeksą su didžiausia numatoma tikimybe. Tada šis indeksas naudojamas kiekvieno vaizdo numatomai klasei nustatyti.
Naudojant sąrašo supratimą, šis metodas taikomas visoms prognozėms „numatymo“ masyve, todėl gaunamas „numatytų klasių“ sąrašas.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Prognozių vizualizavimas
Dabar matome, kaip atrodo mūsų modelis.
Norint įvertinti, kaip sekasi modeliui, bus rodomos pirmosios 10 nuotraukų ir jų prognozės. Jis nubraižys nuotraukas pilkais tonais ir parodys tikrąją vaizdo klasę ir klasę, kurią numatė modelis naudojant matplotlib.pyplot modulį.
Funkcija „imshow“ naudojama „for“, kad nubrėžtų kiekvieną iš pirmųjų 10 bandomųjų rinkinių nuotraukų. Tikslų pavadinimai [y test[i]] ir numatomos klasės [i] naudojami atitinkamai vaizdo faktinei ir numatomai klasei nustatyti. Tada kiekvieno siužeto pavadinimai nurodomi šiomis klasifikacijomis.
Galiausiai brėžinys rodomas naudojant plt.show() metodą.
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()
Apvynioti
TensorFlow siūlo išsamią ir lanksčią aplinką mašininio mokymosi modeliams kurti.
Tiksliai sureguliavus modelį, kad jis atitiktų konkrečius reikalavimus, arba pridedant naujų mašininio mokymosi patobulinimų, modelio tikslumas gali būti dar labiau padidintas.
Tikėtina, kad „TensorFlow“ ir veido atpažinimas ateityje bus vis dažniau naudojami tokiose pramonės šakose kaip apsaugos sistemos, biometrinis autentifikavimas ir sveikatos priežiūra. Netrukus pamatysime patrauklių naujovių.
Palikti atsakymą