TensorFlow is 'n veelsydige hulpmiddel om masjienleermodelle te skep.
In hierdie pos sal ons kyk hoe om 'n gesigherkenningstelsel te skep met TensorFlow, 'n oopbron-masjienleerraamwerk. Ons gaan oor die noodsaaklike prosesse in die skep van 'n suksesvolle gesigherkenningstelsel, van die insameling en voorbereiding van data tot die opleiding en assessering van 'n model.
Jy sal eerstehandse ervaring met TensorFlow kry om gesigsherkenning te skep met behulp van kodebrokkies en werklike voorbeelde. U is welkom om saam te volg terwyl ons voortgaan.
Inleiding tot TensorFlow
TensorFlow is 'n gratis en oopbron-biblioteek. Dit is 'n simboliese wiskunde gereedskapkas wat datavloei en differensieerbare programmering gebruik. Jy kan 'n reeks take daarmee hanteer, insluitend diep neurale netwerk opleiding.
TensorFlow is kragtig en aanpasbaar. Net so is dit 'n wonderlike hulpmiddel vir die ontwikkeling en die implementering van masjienleermodelle. Jy kan ingewikkelde modelle bou met verskeie lae en tensor-bewerkings. Voorafgeboude modelle in die biblioteek kan ook verfyn word vir spesifieke behoeftes.
Verder het TensorFlow 'n groot en groeiende gebruikersgemeenskap. Daar is dus 'n oorvloed inligting en hulp vir individue wat nuut op die platform is.
TensorFlow is gewild vir machine learning deels omdat dit 'n end-tot-end werkvloei bied. So, jy kan maklik modelle bou, oplei en ontplooi. Dit verskaf gereedskap en strategieë vir die verbetering en skaal van modelle om aan spesifieke vereistes te voldoen. Dit wissel van datavoorverwerking tot modelontplooiing.
Wat is gesigherkenning?
Gesigherkenning is 'n rekenaarvisie taak wat 'n persoon se identifikasie op grond van hul gesig identifiseer. Hierdie tegniek herken gesigseienskappe, soos die vorm en tekstuur van die oë, neus en mond.
En dit vergelyk hulle met 'n databasis van bekende gesigte om 'n pasmaat te identifiseer. Gesigherkenning het verskeie gebruike, insluitend sekuriteitstelsels, foto-organisasie en biometriese verifikasie.
Gesigherkenningsalgoritmes se akkuraatheid het die afgelope paar jaar aansienlik toegeneem as gevolg van deurbrake in masjienleer.
Die invoer van nodige biblioteke
Voordat ons iets begin, moet ons die biblioteke wat nodig is vir ons model invoer. Tensorflow (tf) word ingevoer en gebruik om die model te skep en op te lei. <(p>
"numpy" voer wiskundige berekeninge en dataverwerking uit.
"matplotlib.pyplot" word ingevoer as plt en gebruik vir datakartering en visualiserings.
Laastens word "haal lfw mense" vanaf sklearn ingevoer. datastelle en gebruik om die gesigsherkenningsdatastel te laai. Hierdie funksie is deel van die scikit-leer gereedskapstel. Danksy hierdie funksie hoef ons nie nog 'n datastel op te laai nie. Dit is reeds in sckit-learn gebou.
En dit gee jou toegang tot 'n wye verskeidenheid van datastelle vir masjienleer toepassings. In hierdie scenario gebruik ons die haal lfw-mense-metode om die "Gemerkte gesigte in die natuur" (LFW) datastel te herwin. Dit bestaan uit foto's van mense se gesigte sowel as die etikette wat daarmee saamgaan.
Hierdie biblioteke is van kritieke belang in die implementering en evaluering van ons gesigherkenningsmodel.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Voorverwerking en laai van die datastel vir gesigherkenning
In hierdie deel gebruik ons die "haal lfw mense"-funksie om die gesigsherkenningsdata vooraf te verwerk. Eerstens gebruik ons haal lfw mense met die opsie "min gesigte per persoon=60". Dit dui aan dat ons slegs persone in die datastel wil insluit wat ten minste 60 foto's het. Daarom verseker ons dat ons model voldoende data het om te leer. Dit verminder ook die gevaar van oorpas.
Die data en etikette van die gesigte-voorwerp word dan onttrek en aan die veranderlikes X en y toegewys. X hol.
Ons is nou gereed om ons gesigsherkenningsmodel op te lei deur voorafverwerkte data en etikette te gebruik.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Verdeel opleiding- en toetsstelle
In hierdie stap het ons ons gesigherkenningsdatastel in twee helftes verdeel deur die treintoetsverdelingsmetode van sklearn.model-seleksie te gebruik. Die doel van hierdie verdeling is om ons model se prestasie na opleiding te assesseer
Die treintoetsverdelingsfunksie aanvaar as invoerdata X en byskrifte y. En dit verdeel hulle in opleiding- en toetsstelle. Ons kies toetsgrootte=0.2 in hierdie voorbeeld. Dit impliseer dat 20% van die data as die toetsstel en 80% as die opleidingstel gebruik sal word. Verder gebruik ons ewekansige toestand=42 om te verseker dat die data konsekwent verdeel word elke keer as die kode uitgevoer word.
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)
Berei die data voor
Die doel van voorafverwerking van data is om dit voor te berei vir inskrywing in die model. Die data word in hierdie kode vooraf verwerk deur elke datapunt deur 255 te deel.
Wat het ons gemotiveer om dit te bereik? Normalisering is 'n voorverwerkingsprosedure wat in masjienleer gebruik word om te verseker dat alle kenmerke op dieselfde skaal is. In hierdie scenario, verdeling deur 255 skaleer die data na 'n reeks van 0 tot 1, wat 'n gewone beelddata normaliseringstap is.
Dit versnel die model se konvergensie en kan sy werkverrigting verhoog.
X_train = X_train / 255.0
X_test = X_test / 255.0
Die skep van die modus
Ons wil die individu identifiseer wie se gesig in 'n prentjie verskyn. In hierdie geval sal ons 'n volledig gekoppelde netwerk gebruik, dikwels bekend as 'n digte netwerk. Dit is 'n kunsmatige neurale netwerk wat gebruik is om die model te skep.
Kunsmatige neurale netwerke word gemodelleer na hoe die menslike brein funksioneer en georganiseer is. Hulle bestaan uit inligting-verwerking nodusse of neurone wat gekoppel is. Elke neuron in 'n laag in 'n digte netwerk is gekoppel aan elke neuron in die laag daarbo.
Die model het vier lae in hierdie kode. Om in die volgende laag ingevoer te word, word die invoerdata in die eerste laag in 'n eendimensionele skikking afgeplat. Die 128 en 64 neurone in die volgende twee lae is dienooreenkomstig heeltemal gekoppel.
Die ReLU-aktiveringsfunksie is 'n unieke aktiveringsfunksie wat deur hierdie lae gebruik word. Daarmee kan ons die model kry om nie-lineêre korrelasies tussen die insette en uitsette te leer. Die laaste laag gebruik die softmax-aktiveringsfunksie om voorspellings te maak. En dit is 'n volledig gekoppelde laag met soveel neurone as wat daar potensiële klasse is.
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')
])
Samestelling van die model
Die model word saamgestel met behulp van die "samestel"-funksie. Ons moet die model voorberei vir opleiding. Dus, ons sal die optimaliseerder, verliesfunksie en maatstawwe definieer wat gebruik sal word om die model te assesseer.
Tydens opleiding is die optimaliseerder in beheer van die verandering van die model se parameters. Die "adam"-optimaliseerder is 'n gewilde diepleer-optimeringstegniek.
Ons gebruik die verliesfunksie om die model se prestasie op die opleidingsdata te assesseer. Omdat die teikenetikette heelgetalle is wat die beeld se klas weerspieël eerder as een-warm-gekodeerde vektore, is die "yl kategoriese kruisentropie" verliesfunksie gunstig.
Laastens definieer ons die maatstawwe om die model te assesseer, in hierdie geval, "akkuraatheid".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Model Opleiding
Ons sal die "pas"-funksie gebruik om die model op te lei.
Ons sal die opleidingsdata (X-trein) en verwante etikette (y-trein) verskaf, asook die aantal tydperke (iterasies) stel om as 10 te loop. Die opleidingsprosedure wysig die modelgewigte om 'n verlies te verminder (die verskil tussen voorspelde en werklike etikette) en verbeter die akkuraatheid van opleidingsdata.
model.fit(X_train, y_train, epochs=10)
Model Evaluering
Nou moet ons die opgeleide model op die toetsdata assesseer. Ons gebruik die toetsverlies en toetsakkuraatheid word gebruik om die model se prestasie te assesseer. Op die toetsdata X-toets en die toetsetikette y-toets, moet ons "die model.evaluate-funksie" noem
Die funksie lewer die toetsakkuraatheid en toetsverlies uit. Die veranderlikes toets verlies en toets akkuraatheid, onderskeidelik, bevat hierdie waardes. Ten slotte gebruik ons die "druk" funksie om die toets akkuraatheid uit te voer.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Klasse voorspel en die voorspelde klasse kry
Deur die opleidingsmodel en die toetsdata te gebruik, maak die algoritme voorspellings. Wanneer die toetsdata na die "model.predict"-metode oorgedra word, lewer dit 'n verskeidenheid voorspellings vir elke prent in die toetsstel uit.
Die teikenklasnaam vir elke prent word dan uit die "teikenname"-lys verkry deur die "np.argmax"-funksie te gebruik om die indeks met die grootste voorspelde waarskynlikheid te identifiseer. Hierdie indeks word dan gebruik om die voorspelde klas vir elke beeld te bepaal.
Deur 'n lysbegrip te gebruik, word al die voorspellings in die "voorspellings"-skikking aan hierdie metode onderwerp, wat lei tot die "voorspelde klasse"-lys.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Visualisering van die voorspellings
Ons kan nou sien hoe ons model lyk.
Om te evalueer hoe goed die model vaar, sal die eerste 10 foto's en hul voorspellings gewys word. Dit sal die foto's in grysskaal plot en beide die werklike klas van die prent en die klas vertoon wat deur die model voorspel is deur die matplotlib.pyplot-module te gebruik.
Die "imshow"-funksie word deur die for-lus gebruik om elk van die eerste 10 toetsstelfoto's te plot. Teikenname[y toets[i]] en voorspelde klasse[i] word gebruik om onderskeidelik die beeld se werklike klas en voorspelde klas te bepaal. Die titels van elke plot word dan deur hierdie klassifikasies aangedui.
Ten slotte word die plot vertoon met behulp van die plt.show() metode.
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()
Afsluit
TensorFlow bied 'n volledige en buigsame omgewing vir die skep van masjienleermodelle.
Deur die model fyn in te stel om aan spesifieke vereistes te voldoen of deur nuwe ontwikkelings in masjienleer by te voeg, kan die akkuraatheid van die model selfs verder verhoog word.
TensorFlow en gesigsherkenning sal waarskynlik in die toekoms toenemend in nywerhede soos sekuriteitstelsels, biometriese verifikasie en gesondheidsorg gebruik word. Ons sal binnekort fassinerende innovasies sien.
Lewer Kommentaar