TensorFlow on monipuolinen työkalu koneoppimismallien luomiseen.
Tässä viestissä tarkastelemme, miten luodaan kasvojentunnistusjärjestelmä TensorFlow'lla, avoimen lähdekoodin koneoppimiskehyksellä. Käymme läpi keskeiset prosessit onnistuneen kasvojentunnistusjärjestelmän luomisessa tiedon keräämisestä ja valmistelusta mallin kouluttamiseen ja arviointiin.
Saat ensikäden kokemusta TensorFlow'sta kasvojentunnistuksen luomiseen koodinpätkien ja tosielämän esimerkkien avulla. Olet tervetullut seuraamaan, kun etenemme.
TensorFlow-johdanto
TensorFlow on ilmainen ja avoimen lähdekoodin kirjasto. Se on symbolinen matemaattinen työkalupakki, joka käyttää datakulkua ja differentioituvaa ohjelmointia. Voit hoitaa sen avulla monenlaisia tehtäviä, mukaan lukien syvät neuroverkkomallien koulutusta.
TensorFlow on tehokas ja mukautuva. Samoin se on loistava työkalu kehittää ja koneoppimismallien käyttöönotto. Voit rakentaa monimutkaisia malleja useilla kerroksilla ja tensorioperaatioilla. Myös kirjaston valmiiksi rakennettuja malleja voidaan hienosäätää erityistarpeita varten.
Lisäksi TensorFlow'lla on valtava ja kasvava käyttäjäyhteisö. Näin ollen alustalla uusille henkilöille on tarjolla runsaasti tietoa ja apua.
TensorFlow on suosittu koneoppiminen osittain siksi, että se tarjoaa päästä päähän työnkulun. Joten voit helposti rakentaa, kouluttaa ja ottaa käyttöön malleja. Se tarjoaa työkaluja ja strategioita mallien parantamiseen ja skaalaamiseen vastaamaan tiettyjä vaatimuksia. Se vaihtelee tietojen esikäsittelystä mallin käyttöönottoon.
Mikä on kasvojentunnistus?
Kasvojentunnistus on a tietokoneen visio tehtävä, joka tunnistaa henkilön kasvojen perusteella. Tämä tekniikka tunnistaa kasvojen piirteet, kuten silmien, nenän ja suun muodon ja rakenteen.
Ja se vertaa niitä tunnettujen kasvojen tietokantaan vastaavuuden tunnistamiseksi. Kasvojentunnistuksella on useita käyttötarkoituksia, kuten turvajärjestelmät, valokuvien järjestäminen ja biometrinen todennus.
Kasvojentunnistusalgoritmien tarkkuus on kasvanut huomattavasti viime vuosina koneoppimisen läpimurtojen seurauksena.
Tarvittavien kirjastojen tuonti
Ennen kuin aloitamme mitään, meidän on tuotava mallillemme tarvittavat kirjastot. Tensorflow (tf) tuodaan ja sitä käytetään mallin luomiseen ja kouluttamiseen. <(p>
"numpy" suorittaa matemaattisia laskelmia ja tietojenkäsittelyä.
"matplotlib.pyplot" tuodaan plt-muodossa ja sitä käytetään datakaavioita ja visualisointeja.
Lopuksi "fetch lfw people" on tuotu sklearnista. tietojoukot ja käytetään kasvojentunnistustietojoukon lataamiseen. Tämä toiminto on osa scikit-learn-työkalupakkia. Tämän toiminnon ansiosta meidän ei tarvinnut ladata toista tietojoukkoa. Tämä on jo rakennettu sckit-learnissä.
Ja se antaa sinulle pääsyn laajaan valikoimaan tietojoukot koneoppimista varten sovellukset. Tässä skenaariossa käytämme fetch lfw people -menetelmää "Labeled Faces in the Wild" (LFW) -tietojoukon noutamiseen. Se sisältää valokuvia ihmisten kasvoista sekä niihin liittyvistä tarroista.
Nämä kirjastot ovat kriittisiä kasvojentunnistusmallimme toteutuksessa ja arvioinnissa.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Kasvojentunnistustietojoukon esikäsittely ja lataus
Tässä osassa hyödynnämme "hae lfw people" -toimintoa kasvojentunnistustietojen esikäsittelyyn. Ensin käytämme hae lfw people -vaihtoehtoa "min faces per person = 60". Tämä tarkoittaa, että haluamme sisällyttää tietoaineistoon vain henkilöt, joilla on vähintään 60 kuvaa. Näin ollen varmistamme, että mallillamme on riittävästi tietoa oppimista varten. Tämä vähentää myös yliasennusvaaraa.
Kasvot-objektin tiedot ja tunnisteet poimitaan sitten ja määritetään muuttujiin X ja y. X hol.
Olemme nyt valmiita kouluttamaan kasvojentunnistusmalliamme käyttämällä esikäsiteltyä dataa ja tarroja.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Harjoitus- ja testisarjojen jakaminen
Tässä vaiheessa jaamme kasvojentunnistustietojoukon kahteen osaan käyttämällä sklearn.model-valinnan junatestin jakomenetelmää. Tämän jaon tavoitteena on arvioida mallimme suorituskykyä harjoittelun jälkeen
Junatestin split-funktio hyväksyy syötteinä datan X ja nimeä y. Ja se jakaa ne harjoitus- ja testisarjoihin. Valitsemme tässä esimerkissä testikoon = 0.2. Tämä tarkoittaa, että 20 % tiedoista käytetään testisarjana ja 80 % harjoitussarjana. Lisäksi käytämme satunnaistilaa = 42 varmistaaksemme, että tiedot jaetaan johdonmukaisesti joka kerta, kun koodi suoritetaan.
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)
Tietojen valmistelu
Tietojen esikäsittelyn tarkoituksena on valmistella se malliin syöttämistä varten. Tiedot esikäsitellään tässä koodissa jakamalla jokainen datapiste 255:llä.
Mikä motivoi meitä saavuttamaan tämän? Normalisointi on esikäsittelymenettely, jota käytetään koneoppimisessa sen varmistamiseksi, että kaikki ominaisuudet ovat samassa mittakaavassa. Tässä skenaariossa jakaminen 255:llä skaalaa datan alueelle 0-1, mikä on tavallinen kuvadatan normalisointivaihe.
Tämä nopeuttaa mallin konvergenssia ja voi parantaa sen suorituskykyä.
X_train = X_train / 255.0
X_test = X_test / 255.0
Tilan luominen
Haluamme tunnistaa henkilön, jonka kasvot näkyvät kuvassa. Tässä tapauksessa käytämme täysin yhdistettyä verkkoa, joka tunnetaan usein nimellä tiheä verkko. Se on keinotekoinen hermoverkko, jota käytettiin mallin luomiseen.
Keinotekoiset hermoverkot mallinnetaan sen mukaan, miten ihmisaivot toimivat ja ovat organisoituneet. Ne koostuvat tiedonkäsittelysolmuista tai neuroneista, jotka on linkitetty toisiinsa. Jokainen tiheän verkon kerroksen hermosolu on linkitetty jokaiseen sen yläpuolella olevan kerroksen neuroniin.
Mallissa on neljä kerrosta tässä koodissa. Seuraavaan kerrokseen syötettäväksi syötetiedot tasoitetaan ensimmäisessä kerroksessa yksiulotteiseksi taulukoksi. Seuraavassa kahdessa kerroksessa olevat 128 ja 64 neuronia on vastaavasti täysin linkitetty.
ReLU-aktivointitoiminto on ainutlaatuinen aktivointitoiminto, jota nämä tasot käyttävät. Tämän avulla voimme saada mallin oppimaan epälineaariset korrelaatiot tulojen ja lähtöjen välillä. Viimeinen kerros käyttää softmax-aktivointitoimintoa ennusteiden tekemiseen. Ja se on täysin yhdistetty kerros, jossa on niin monta neuronia kuin on potentiaalisia luokkia.
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')
])
Mallin kokoaminen
Malli on käännetty käyttämällä “kääntä”-toimintoa. Meidän on valmisteltava malli koulutusta varten. Joten määrittelemme optimoijan, häviöfunktion ja mittarit, joita käytetään mallin arvioinnissa.
Harjoittelun aikana optimoija vastaa mallin parametrien muuttamisesta. "Adam"-optimointityökalu on suosittu syväoppimisen optimointitekniikka.
Käytämme häviöfunktiota arvioidaksemme mallin suorituskykyä harjoitustiedoissa. Koska kohdetunnisteet ovat kokonaislukuja, jotka heijastavat kuvan luokkaa yhden kuuman koodatun vektorin sijaan, "harva kategorinen crossentropia" -häviöfunktio on edullinen.
Lopuksi määrittelemme mittarit mallin arvioimiseksi, tässä tapauksessa "tarkkuuden".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Malliharjoittelu
Käytämme "fit"-toimintoa mallin kouluttamiseen.
Toimitamme harjoitustiedot (X-juna) ja niihin liittyvät tunnisteet (y-juna) sekä asetamme jaksojen (iteraatioiden) lukumääräksi 10. Harjoitusmenettely muuttaa mallin painoja häviön vähentämiseksi (ero ennustetut ja todelliset tarrat) ja parantaa harjoitustietojen tarkkuutta.
model.fit(X_train, y_train, epochs=10)
Mallin arviointi
Nyt meidän on arvioitava koulutettu malli testitietojen perusteella. Käytämme testihäviötä ja testin tarkkuutta käytetään mallin suorituskyvyn arvioimiseen. Testitiedoissa X test ja testimerkinnöissä y testi meidän on kutsuttava "model.evaluate-funktio".
Toiminto tulostaa testin tarkkuuden ja testihäviön. Muuttujat testihäviö ja testin tarkkuus sisältävät nämä arvot. Lopuksi käytämme "print"-toimintoa testitarkkuuden tulostamiseen.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Luokkien ennustaminen ja ennustettujen kurssien saaminen
Algoritmi tekee ennusteita harjoitusmallin ja testidatan avulla. Kun testidata välitetään "model.predict"-menetelmälle, se tulostaa joukon ennusteita jokaiselle testisarjan kuvalle.
Kunkin kuvan kohdeluokan nimi noudetaan sitten "kohteiden nimet" -luettelosta käyttämällä "np.argmax"-funktiota, jotta voidaan tunnistaa indeksi, jolla on suurin ennustettu todennäköisyys. Tätä indeksiä käytetään sitten kunkin kuvan ennustetun luokan määrittämiseen.
Listan ymmärtämisen avulla kaikki "ennusteet" -taulukon ennusteet alistetaan tälle menetelmälle, jolloin tuloksena on "ennustetut luokat" -luettelo.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Ennusteiden visualisointi
Nyt voimme nähdä, miltä mallimme näyttää.
Mallin toiminnan arvioimiseksi ensimmäiset 10 kuvaa ja niiden ennusteet näytetään. Se piirtää valokuvat harmaasävyinä ja näyttää sekä kuvan todellisen luokan että mallin ennustaman luokan matplotlib.pyplot-moduulia käyttämällä.
"Imshow"-toimintoa käyttää for-silmukka piirtääkseen jokaisen 10 ensimmäisestä testisarjan valokuvasta. Kohteen nimiä [y testi[i]] ja ennustettuja luokkia [i] käytetään määrittämään kuvan todellinen luokka ja ennustettu luokka. Kunkin juonen otsikot ilmaistaan sitten näillä luokituksilla.
Lopuksi kaavio näytetään plt.show() -menetelmällä.
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()
Paketoida
TensorFlow tarjoaa täydellisen ja joustavan ympäristön koneoppimismallien luomiseen.
Hienosäätämällä mallia vastaamaan tiettyjä vaatimuksia tai lisäämällä uusia kehityskohteita koneoppimiseen, mallin tarkkuutta voidaan parantaa entisestään.
TensorFlow'ta ja kasvojentunnistusta käytetään todennäköisesti tulevaisuudessa yhä enemmän sellaisilla aloilla kuin turvajärjestelmät, biometrinen todennus ja terveydenhuolto. Näemme lähiaikoina kiehtovia innovaatioita.
Jätä vastaus