TensorFlow on mitmekülgne tööriist masinõppemudelite loomiseks.
Selles postituses vaatleme, kuidas luua avatud lähtekoodiga masinõpperaamistiku TensorFlow abil näotuvastussüsteem. Käsitleme eduka näotuvastussüsteemi loomisel olulisi protsesse alates andmete kogumisest ja ettevalmistamisest kuni mudeli koolitamise ja hindamiseni.
Saate TensorFlow'ga vahetu kogemuse, et luua koodijuppide ja reaalsete näidete abil näotuvastust. Olete teretulnud meie edenemist jälgima.
Sissejuhatus teenusesse TensorFlow
TensorFlow on tasuta ja avatud lähtekoodiga raamatukogu. See on sümboolne matemaatika tööriistakast, mis kasutab andmevoogu ja diferentseeritavat programmeerimist. Sellega saate hakkama mitmesuguste ülesannetega, sealhulgas sügavate ülesannetega Närvivõrgus koolitust.
TensorFlow on võimas ja kohandatav. Samuti on see suurepärane vahend arendamiseks ja masinõppe mudelite juurutamine. Saate ehitada keerukaid mudeleid mitme kihi ja tensoroperatsioonidega. Samuti saab raamatukogus olevaid eelehitatud mudeleid konkreetsete vajaduste jaoks peenhäälestada.
Lisaks on TensorFlow'l tohutu ja laienev kasutajaskond. Seega on platvormi uutele kasutajatele palju teavet ja abi.
TensorFlow on populaarne masinõpe osaliselt seetõttu, et see tagab täieliku töövoo. Seega saate hõlpsasti mudeleid ehitada, koolitada ja juurutada. See pakub tööriistu ja strateegiaid mudelite täiustamiseks ja skaleerimiseks vastavalt konkreetsetele nõudmistele. See varieerub andmete eeltöötlusest mudeli juurutamiseni.
Mis on näotuvastus?
Näotuvastus on a arvuti nägemine ülesanne, mis tuvastab isiku näo järgi. See tehnika tuvastab näojooned, nagu silmade, nina ja suu kuju ja tekstuur.
Ja see võrdleb neid vaste tuvastamiseks tuntud nägude andmebaasiga. Näotuvastusel on mitu kasutusala, sealhulgas turvasüsteemid, fotode korraldamine ja biomeetriline autentimine.
Näotuvastusalgoritmide täpsus on viimastel aastatel märkimisväärselt suurenenud tänu masinõppe läbimurdele.
Vajalike raamatukogude importimine
Enne millegi alustamist peame importima oma mudeli jaoks vajalikud teegid. Tensorflow (tf) imporditakse ja seda kasutatakse mudeli loomiseks ja treenimiseks. <(p>
“numpy” teostab matemaatilisi arvutusi ja andmetöötlust.
"matplotlib.pyplot" imporditakse plt-na ja seda kasutatakse andmete diagrammide koostamine ja visualiseerimine.
Lõpuks imporditakse sklearnist "fetch lfw people". andmekogumeid ja kasutatakse näotuvastuse andmestiku laadimiseks. See funktsioon on osa scikit-learni tööriistakomplektist. Tänu sellele funktsioonile ei pidanud me teist andmestikku üles laadima. See on juba sckit-learnis sisse ehitatud.
Ja see annab teile juurdepääsu laiale valikule masinõppe andmestikud rakendusi. Selle stsenaariumi korral kasutame andmestiku „LFW” (märgistatud näod looduses) toomiseks meetodit lfw people. See sisaldab fotosid inimeste nägudest ja nendega seotud siltidest.
Need raamatukogud on meie näotuvastusmudeli rakendamisel ja hindamisel kriitilise tähtsusega.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Näotuvastuse andmestiku eeltöötlemine ja laadimine
Selles osas kasutame näotuvastusandmete eeltöötlemiseks funktsiooni „Ftch lfw people”. Esiteks kasutame funktsiooni Fetch lfw people valikuga "min nägusid inimese kohta = 60". See näitab, et tahame andmestikku kaasata ainult isikud, kellel on vähemalt 60 fotot. Seega tagame, et meie mudelil on õppimiseks piisavalt andmeid. Samuti vähendab see ülepaigutamise ohtu.
Seejärel ekstraheeritakse näoobjekti andmed ja sildid ning määratakse need muutujatele X ja y. X hol.
Oleme nüüd valmis koolitama oma näotuvastusmudelit eeltöödeldud andmete ja siltide abil.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Treeningu- ja testikomplektide jagamine
Selles etapis jagasime oma näotuvastuse andmestiku kaheks pooleks, kasutades sklearn.model valikus olevat rongitesti jagamise meetodit. Selle jaotuse eesmärk on hinnata meie mudeli jõudlust pärast treeningut
Rongikatse jagamise funktsioon aktsepteerib sisendandmeid X ja märgiseid y. Ja see jagab need treening- ja testikomplektideks. Selles näites valime testi suuruse = 0.2. See tähendab, et 20% andmetest kasutatakse testikomplektina ja 80% treeningkomplektina. Lisaks kasutame juhuslikku olekut = 42, et tagada andmete järjepidev jagamine iga kord, kui koodi esitatakse.
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)
Andmete ettevalmistamine
Andmete eeltöötluse eesmärk on valmistada need ette mudelisse sisestamiseks. Andmeid eeltöödeldakse selles koodis, jagades iga andmepunkti 255-ga.
Mis ajendas meid seda saavutama? Normaliseerimine on masinõppes kasutatav eeltöötlusprotseduur, mis tagab, et kõik funktsioonid on samal skaalal. Selle stsenaariumi korral skaleerib 255-ga jagamine andmed vahemikku 0 kuni 1, mis on tavaline pildiandmete normaliseerimise samm.
See kiirendab mudeli lähenemist ja võib suurendada selle jõudlust.
X_train = X_train / 255.0
X_test = X_test / 255.0
Režiimi loomine
Soovime tuvastada isiku, kelle nägu on pildil. Sel juhul kasutame täielikult ühendatud võrku, mida sageli nimetatakse tihedaks võrguks. Tegemist on tehisnärvivõrguga, mida kasutati mudeli loomisel.
Kunstlikud närvivõrgud on modelleeritud selle järgi, kuidas inimese aju toimib ja on organiseeritud. Need koosnevad omavahel seotud infotöötlussõlmedest või neuronitest. Iga tiheda võrgu kihi neuron on seotud iga selle kohal oleva kihi neuroniga.
Mudelil on selles koodis neli kihti. Järgmisesse kihti sisestamiseks tasandatakse sisendandmed esimeses kihis ühemõõtmeliseks massiiviks. Järgmises kahes kihis olevad 128 ja 64 neuronit on vastavalt täielikult seotud.
ReLU aktiveerimisfunktsioon on unikaalne aktiveerimisfunktsioon, mida need kihid kasutavad. Selle abil saame mudeli õppida mittelineaarseid korrelatsioone sisendite ja väljundite vahel. Viimane kiht kasutab ennustuste tegemiseks softmaxi aktiveerimisfunktsiooni. Ja see on täielikult ühendatud kiht, kus on nii palju neuroneid, kui on potentsiaalseid klasse.
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')
])
Mudeli koostamine
Mudel koostatakse funktsiooni "kompileerimine" abil. Peame mudeli koolituseks ette valmistama. Seega määratleme optimeerija, kadufunktsiooni ja mõõdikud, mida mudeli hindamiseks kasutatakse.
Koolituse ajal vastutab optimeerija mudeli parameetrite muutmise eest. "Adam" optimeerija on populaarne süvaõppe optimeerimise tehnika.
Kasutame kadufunktsiooni, et hinnata mudeli toimivust treeningandmete põhjal. Kuna sihtmärgised on täisarvud, mis peegeldavad pildi klassi, mitte ühekordselt kodeeritud vektoreid, on "hõre kategoorilise ristentroopia" kadufunktsioon soodne.
Lõpuks määratleme mudeli, antud juhul "täpsuse" hindamise mõõdikud.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Mudelikoolitus
Modelli treenimiseks kasutame funktsiooni "sobitamine".
Pakume treeninguandmeid (X-rong) ja seotud silte (y-rong) ning määrame epohhide (iteratsioonide) arvuks 10. Treeningprotseduur muudab mudeli raskusi, et vähendada kaotust (erinevus ennustatud ja tegelikud sildid) ning parandada treeningandmete täpsust.
model.fit(X_train, y_train, epochs=10)
Mudeli hindamine
Nüüd peame hindama koolitatud mudelit katseandmete põhjal. Kasutame testi kadu ja testi täpsust kasutatakse mudeli jõudluse hindamiseks. Testiandmete X test ja testisiltide y test puhul peame kutsuma esile funktsiooni „model.evaluate”
Funktsioon väljastab testi täpsuse ja testi kadu. Muutujad testikadu ja testi täpsus sisaldavad neid väärtusi. Lõpuks kasutame testi täpsuse väljastamiseks funktsiooni "print".
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Tundide ennustamine ja ennustatud tundide saamine
Kasutades treeningmudelit ja katseandmeid, teeb algoritm ennustusi. Kui testiandmed edastatakse meetodile „model.predict”, väljastab see ennustuste massiivi iga testikomplekti pildi kohta.
Seejärel leitakse iga pildi sihtklassi nimi loendist "sihtmärgi nimed", kasutades funktsiooni "np.argmax", et tuvastada suurima prognoositud tõenäosusega indeks. Seda indeksit kasutatakse seejärel iga pildi prognoositava klassi määramiseks.
Loendi mõistmist kasutades allutatakse sellele meetodile kõik "ennustuste" massiivi ennustused, mille tulemuseks on "ennustatud klasside" loend.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Ennustuste visualiseerimine
Nüüd näeme, kuidas meie mudel välja näeb.
Et hinnata, kui hästi modellil läheb, näidatakse 10 esimest fotot ja nende ennustusi. See joonistab fotod halltoonides ja kuvab nii pildi tegeliku klassi kui ka mudeli ennustatud klassi, kasutades moodulit matplotlib.pyplot.
Funktsiooni "imshow" kasutab silmus for, et joonistada kõik esimesed 10 katsekomplekti fotot. Sihtmärgi nimesid [y test[i]] ja ennustatud klasse[i] kasutatakse vastavalt kujutise tegeliku klassi ja prognoositava klassi määramiseks. Seejärel tähistatakse iga süžee pealkirjad nende klassifikatsioonidega.
Lõpuks kuvatakse graafik meetodi plt.show() abil.
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()
Pakkima
TensorFlow pakub terviklikku ja paindlikku keskkonda masinõppemudelite loomiseks.
Mudeli täpseks häälestamisel, et see vastaks konkreetsetele nõuetele, või masinõppesse uute arenduste lisamisega, saab mudeli täpsust veelgi suurendada.
TensorFlow'd ja näotuvastust kasutatakse tulevikus tõenäoliselt üha enam sellistes tööstusharudes nagu turvasüsteemid, biomeetriline autentimine ja tervishoid. Peagi näeme põnevaid uuendusi.
Jäta vastus