TensorFlow ir daudzpusīgs rīks mašīnmācības modeļu izveidei.
Šajā ziņojumā mēs apskatīsim, kā izveidot sejas atpazīšanas sistēmu, izmantojot TensorFlow, atvērtā koda mašīnmācības sistēmu. Mēs apskatīsim būtiskos procesus veiksmīgas sejas atpazīšanas sistēmas izveidē, sākot no datu vākšanas un sagatavošanas līdz modeļa apmācībai un novērtēšanai.
Jūs iegūsit tiešu pieredzi ar TensorFlow, lai izveidotu sejas atpazīšanu, izmantojot koda fragmentus un reālus piemērus. Esiet laipni aicināti sekot līdzi, kā mēs turpināsim.
Ievads TensorFlow
TensorFlow ir bezmaksas atvērtā koda bibliotēka. Tā ir simboliska matemātikas rīkkopa, kas izmanto datu plūsmu un diferencējamu programmēšanu. Ar to varat veikt dažādus uzdevumus, tostarp dziļus neironu tīklu apmācību.
TensorFlow ir spēcīgs un pielāgojams. Tāpat tas ir lielisks līdzeklis, lai attīstītu un mašīnmācīšanās modeļu izvietošana. Varat izveidot sarežģītus modeļus ar vairākiem slāņiem un tenzora operācijām. Arī bibliotēkā iepriekš izveidotos modeļus var precīzi pielāgot īpašām vajadzībām.
Turklāt TensorFlow ir milzīga un augoša lietotāju kopiena. Tādējādi ir pieejams milzums informācijas un palīdzības personām, kuras platformas ir jaunas.
TensorFlow ir populārs mašīna mācīšanās daļēji tāpēc, ka tas nodrošina pilnīgu darbplūsmu. Tātad, jūs varat viegli izveidot, apmācīt un izvietot modeļus. Tas nodrošina rīkus un stratēģijas modeļu uzlabošanai un mērogošanai, lai tie atbilstu konkrētām prasībām. Tas atšķiras no datu pirmapstrādes līdz modeļa izvietošanai.
Kas ir sejas atpazīšana?
Sejas atpazīšana ir a datora vīzija uzdevums, kas identificē personas identifikāciju, pamatojoties uz tās seju. Šis paņēmiens atpazīst sejas iezīmes, piemēram, acu, deguna un mutes formu un tekstūru.
Un tā salīdzina tās ar zināmu seju datu bāzi, lai noteiktu atbilstību. Sejas atpazīšanai ir vairāki lietojumi, tostarp drošības sistēmas, fotoattēlu organizēšana un biometriskā autentifikācija.
Seju atpazīšanas algoritmu precizitāte pēdējos gados ir ievērojami palielinājusies, pateicoties sasniegumiem mašīnmācībā.
Nepieciešamo bibliotēku importēšana
Pirms kaut ko sākt, mums ir jāimportē mūsu modelim nepieciešamās bibliotēkas. Tensorflow (tf) tiek importēts un izmantots, lai izveidotu un apmācītu modeli. <(p>
“numpy” veic matemātiskos aprēķinus un datu apstrādi.
“matplotlib.pyplot” tiek importēts kā plt un tiek izmantots datu diagrammu veidošana un vizualizācijas.
Visbeidzot, “fetch lfw people” ir importēts no sklearn. datu kopas un izmanto, lai ielādētu sejas atpazīšanas datu kopu. Šī funkcija ir daļa no scikit-learn rīku komplekta. Pateicoties šai funkcijai, mums nebija jāaugšupielādē cita datu kopa. Tas jau ir iebūvēts programmā sckit-learn.
Un tas sniedz jums piekļuvi plašam klāstam datu kopas mašīnmācībai lietojumprogrammas. Šajā scenārijā mēs izmantojam metodi fetch lfw people, lai izgūtu datu kopu “Labeled Faces in the Wild” (LFW). Tajā ir iekļauti cilvēku seju fotoattēli, kā arī ar tām pievienotās etiķetes.
Šīs bibliotēkas ir ļoti svarīgas mūsu sejas atpazīšanas modeļa ieviešanā un novērtēšanā.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Sejas atpazīšanas datu kopas pirmapstrāde un ielāde
Šajā daļā mēs izmantojam funkciju “Ielādēt lfw cilvēkus”, lai iepriekš apstrādātu sejas atpazīšanas datus. Pirmkārt, mēs izmantojam funkciju Fetch lfw people ar opciju “min seju vienai personai=60”. Tas norāda, ka mēs vēlamies datu kopā iekļaut tikai personas, kurām ir vismaz 60 fotoattēli. Tādējādi mēs nodrošinām, ka mūsu modelim ir atbilstoši dati, ko mācīties. Tas arī samazina pārklāšanas risku.
Dati un etiķetes no objekta sejas tiek iegūti un piešķirti mainīgajiem X un y. X hol.
Tagad esam gatavi apmācīt mūsu sejas atpazīšanas modeli, izmantojot iepriekš apstrādātus datus un etiķetes.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Apmācību un testu komplektu sadalīšana
Šajā solī mēs sadalām sejas atpazīšanas datu kopu divās daļās, izmantojot vilciena testa sadalīšanas metodi no sklearn.model atlases. Šī sadalījuma mērķis ir novērtēt mūsu modeļa veiktspēju pēc treniņa
Vilciena testa sadalīšanas funkcija pieņem kā ievades datus X un etiķetes y. Un tas sadala tos treniņu un testu komplektos. Šajā piemērā mēs izvēlamies testa lielumu = 0.2. Tas nozīmē, ka 20% datu tiks izmantoti kā testa komplekts un 80% kā apmācības komplekts. Turklāt mēs izmantojam izlases stāvokli = 42, lai nodrošinātu, ka dati tiek konsekventi sadalīti katru reizi, kad tiek izpildīts kods.
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)
Datu sagatavošana
Datu priekšapstrādes mērķis ir sagatavot tos ievadīšanai modelī. Dati tiek iepriekš apstrādāti šajā kodā, dalot katru datu punktu ar 255.
Kas mūs mudināja to sasniegt? Normalizācija ir priekšapstrādes procedūra, ko izmanto mašīnmācībā, lai garantētu, ka visas funkcijas ir vienā mērogā. Šajā scenārijā, dalot ar 255, dati tiek mērogoti diapazonā no 0 līdz 1, kas ir parasts attēla datu normalizācijas solis.
Tas paātrina modeļa konverģenci un var palielināt tā veiktspēju.
X_train = X_train / 255.0
X_test = X_test / 255.0
Režīma izveide
Mēs vēlamies identificēt personu, kuras seja ir redzama attēlā. Šajā gadījumā mēs izmantosim pilnībā savienotu tīklu, ko bieži sauc par blīvu tīklu. Tas ir mākslīgs neironu tīkls, kas tika izmantots modeļa izveidošanai.
Mākslīgie neironu tīkli ir veidoti pēc tam, kā darbojas un ir sakārtotas cilvēka smadzenes. Tie sastāv no informācijas apstrādes mezgliem vai neironiem, kas ir saistīti. Katrs neirons slānī blīvā tīklā ir saistīts ar katru neironu slānī virs tā.
Modelim šajā kodā ir četri slāņi. Lai ievades dati tiktu ievadīti nākamajā slānī, pirmajā slānī tiek saplacināti viendimensijas masīvā. Attiecīgi 128 un 64 neironi nākamajos divos slāņos ir pilnībā saistīti.
ReLU aktivizācijas funkcija ir unikāla aktivizācijas funkcija, ko izmanto šie slāņi. Tādējādi mēs varam iegūt modeli, lai uzzinātu nelineāras korelācijas starp ieejām un izvadēm. Pēdējais slānis prognožu veikšanai izmanto softmax aktivizācijas funkciju. Un tas ir pilnībā savienots slānis ar tik daudz neironu, cik ir potenciālo klašu.
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')
])
Modeļa sastādīšana
Modelis tiek kompilēts, izmantojot funkciju “kompilēšana”. Mums ir jāsagatavo modelis apmācībai. Tātad, mēs definēsim optimizētāju, zaudējumu funkciju un metriku, kas tiks izmantota modeļa novērtēšanai.
Apmācības laikā optimizētājs ir atbildīgs par modeļa parametru maiņu. “Adam” optimizētājs ir populārs padziļinātas optimizācijas paņēmiens.
Mēs izmantojam zaudējumu funkciju, lai novērtētu modeļa veiktspēju apmācību datos. Tā kā mērķa etiķetes ir veseli skaitļi, kas atspoguļo attēla klasi, nevis vienreizēji kodēti vektori, “retās kategoriskās krustentropijas” zaudēšanas funkcija ir labvēlīga.
Visbeidzot, mēs definējam metriku, lai novērtētu modeli, šajā gadījumā “precizitāti”.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Modeļu apmācība
Modeļa apmācīšanai izmantosim funkciju “fit”.
Mēs nodrošināsim apmācības datus (X vilciens) un saistītās etiķetes (y vilciens), kā arī iestatīsim epohu (iterāciju) skaitu, lai izpildītu 10. Apmācības procedūra maina modeļa svarus, lai samazinātu zaudējumus (starpība starp prognozētās un reālās etiķetes) un uzlabo apmācības datu precizitāti.
model.fit(X_train, y_train, epochs=10)
Modeļa novērtējums
Tagad mums ir jānovērtē apmācītais modelis, pamatojoties uz testa datiem. Mēs izmantojam testa zudumu, un testa precizitāte tiek izmantota, lai novērtētu modeļa veiktspēju. Testa datos X tests un testa etiķetēs y tests ir jāizsauc “funkcija model.evaluate”.
Funkcija izvada testa precizitāti un testa zudumus. Mainīgie lielumi testa zudumi un testa precizitāte attiecīgi satur šīs vērtības. Visbeidzot, mēs izmantojam funkciju “drukāšana”, lai izvadītu testa precizitāti.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Nodarbību prognozēšana un paredzēto nodarbību iegūšana
Izmantojot apmācības modeli un testa datus, algoritms veido prognozes. Kad testa dati tiek nodoti metodei “model.predict”, tā izvada prognožu masīvu katram attēlam testa komplektā.
Pēc tam katra attēla mērķa klases nosaukums tiek izgūts no saraksta “mērķa nosaukumi”, izmantojot funkciju “np.argmax”, lai identificētu indeksu ar vislielāko paredzamo varbūtību. Pēc tam šo indeksu izmanto, lai noteiktu paredzamo klasi katram attēlam.
Izmantojot saraksta izpratni, visas prognozes masīvā “prognozes” tiek pakļautas šai metodei, kā rezultātā tiek izveidots “paredzamo klašu” saraksts.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Prognožu vizualizācija
Tagad mēs varam redzēt, kā izskatās mūsu modelis.
Lai novērtētu, cik labi modelei klājas, tiks rādītas pirmās 10 fotogrāfijas un to prognozes. Tas attēlos fotoattēlus pelēktoņos un parādīs gan faktisko attēla klasi, gan modeli, ko paredzējis modelis, izmantojot moduli matplotlib.pyplot.
Funkciju “imshow” izmanto cilpa for, lai attēlotu katru no pirmajiem 10 testa kopas fotoattēliem. Lai noteiktu attēla faktisko klasi un paredzamo klasi, tiek izmantoti mērķa nosaukumi [y test[i]] un paredzamās klases [i]. Pēc tam katra sižeta virsraksti tiek norādīti ar šīm klasifikācijām.
Visbeidzot, diagramma tiek parādīta, izmantojot plt.show() metodi.
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()
Satīt
TensorFlow piedāvā pilnīgu un elastīgu vidi mašīnmācīšanās modeļu izveidei.
Precīzi pielāgojot modeli, lai tas atbilstu konkrētām prasībām, vai pievienojot jaunus mašīnmācības uzlabojumus, modeļa precizitāti var vēl vairāk palielināt.
Iespējams, ka TensorFlow un sejas atpazīšana nākotnē arvien vairāk tiks izmantota tādās nozarēs kā drošības sistēmas, biometriskā autentifikācija un veselības aprūpe. Drīzumā mēs redzēsim aizraujošus jauninājumus.
Atstāj atbildi