Offeryn amlbwrpas yw TensorFlow i greu modelau dysgu peiriannau.
Yn y swydd hon, byddwn yn edrych ar sut i greu system adnabod wynebau gyda TensorFlow, fframwaith dysgu peiriant ffynhonnell agored. Byddwn yn mynd dros y prosesau hanfodol wrth greu system adnabod wynebau llwyddiannus, o gasglu a pharatoi data i hyfforddi ac asesu model.
Byddwch yn cael profiad uniongyrchol gyda TensorFlow i greu adnabyddiaeth wyneb gyda chymorth pytiau cod ac enghreifftiau o'r byd go iawn. Mae croeso i chi ddilyn wrth i ni symud ymlaen.
Cyflwyniad i TensorFlow
Mae TensorFlow yn llyfrgell ffynhonnell agored am ddim. Mae'n flwch offer mathemateg symbolaidd sy'n defnyddio dataflow a rhaglennu gwahaniaethol. Gallwch chi drin amrywiaeth o dasgau ag ef, gan gynnwys rhai dwfn rhwydwaith nefol hyfforddiant.
Mae TensorFlow yn bwerus ac yn addasadwy. Yn yr un modd, mae'n arf gwych ar gyfer datblygu a defnyddio modelau dysgu peirianyddol. Gallwch chi adeiladu modelau cymhleth gyda sawl haen a gweithrediadau tensor. Hefyd, gellir mireinio modelau a adeiladwyd ymlaen llaw yn y llyfrgell ar gyfer anghenion penodol.
Ar ben hynny, mae gan TensorFlow gymuned ddefnyddwyr enfawr sy'n ehangu. Felly, mae yna lu o wybodaeth a chymorth i unigolion sy'n newydd i'r platfform.
Mae TensorFlow yn boblogaidd ar gyfer dysgu peiriant yn rhannol oherwydd ei fod yn darparu llif gwaith o'r dechrau i'r diwedd. Felly, gallwch chi adeiladu, hyfforddi a defnyddio modelau yn hawdd. Mae'n darparu offer a strategaethau ar gyfer gwella a graddio modelau i gyd-fynd â gofynion penodol. Mae'n amrywio o rag-brosesu data i ddefnyddio model.
Beth yw Adnabod Wyneb?
Mae adnabod wynebau yn a gweledigaeth gyfrifiadurol tasg sy'n nodi pwy yw person yn seiliedig ar ei wyneb. Mae'r dechneg hon yn adnabod nodweddion wyneb, megis siâp a gwead y llygaid, y trwyn a'r geg.
Ac, mae'n eu cymharu â chronfa ddata o wynebau hysbys i nodi cyfatebiaeth. Mae sawl defnydd i adnabod wynebau, gan gynnwys systemau diogelwch, trefniadaeth ffotograffau, a dilysu biometrig.
Mae cywirdeb algorithmau adnabod wynebau wedi cynyddu'n sylweddol yn ystod y blynyddoedd diwethaf o ganlyniad i ddatblygiadau arloesol mewn dysgu peiriannau.
Mewnforio Llyfrgelloedd Angenrheidiol
Cyn dechrau ar unrhyw beth, mae angen i ni fewnforio'r llyfrgelloedd sydd eu hangen ar gyfer ein model. Mae tensorflow (tf) yn cael ei fewnforio a'i ddefnyddio i greu a hyfforddi'r model. <(p>
Mae “numpy” yn gwneud cyfrifiadau mathemategol a phrosesu data.
Mae “matplotlib.pyplot” yn cael ei fewnforio fel plt a'i ddefnyddio ar gyfer siartio data a delweddu.
Yn olaf, mae “nôl lfw people” yn cael ei fewnforio o sklearn. setiau data a ddefnyddir i lwytho'r set ddata adnabod wynebau. Mae'r swyddogaeth hon yn rhan o'r pecyn cymorth dysgu scikit. Diolch i'r swyddogaeth hon nid oedd yn rhaid i ni uwchlwytho set ddata arall. Mae hyn eisoes wedi'i gynnwys yn sckit-learn.
Ac, mae'n rhoi mynediad i chi i ystod eang o setiau data ar gyfer dysgu peirianyddol ceisiadau. Yn y senario hwn, rydym yn defnyddio’r dull nôl lfw people i adalw’r set ddata “Labeled Faces in the Wild” (LFW). Mae'n cynnwys lluniau o wynebau pobl yn ogystal â'r labeli sy'n mynd gyda nhw.
Mae'r llyfrgelloedd hyn yn hollbwysig wrth weithredu a gwerthuso ein model adnabod wynebau.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Rhagbrosesu a llwytho'r set ddata adnabod wynebau
Yn y rhan hon, rydym yn defnyddio'r swyddogaeth “nol lfw people” i ragbrosesu'r data adnabod wynebau. Yn gyntaf, rydym yn defnyddio nôl lfw o bobl gyda’r opsiwn “min faces per person=60”. Mae hyn yn dangos mai dim ond pobl sydd ag o leiaf 60 llun yr ydym am eu cynnwys yn y set ddata. Felly, rydym yn sicrhau bod gan ein model ddata digonol i ddysgu. Hefyd, mae hyn yn lleihau'r perygl o orffitio.
Yna mae'r data a'r labeli o'r gwrthrych wynebau yn cael eu tynnu a'u neilltuo i'r newidynnau X ac y. X hol.
Rydym nawr yn barod i hyfforddi ein model adnabod wynebau gan ddefnyddio data a labeli wedi'u prosesu ymlaen llaw.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Hollti Hyfforddiant a Setiau Prawf
Yn y cam hwn, rhannwyd ein set ddata adnabod wynebau yn ddau hanner gan ddefnyddio'r dull rhannu prawf trên o ddewis model sklearn. Nod y rhaniad hwn yw asesu perfformiad ein model ar ôl hyfforddiant
Mae swyddogaeth hollti prawf trên yn derbyn fel data mewnbynnau X a labeli y. Ac, mae'n eu rhannu'n setiau hyfforddi a phrofion. Rydym yn dewis maint prawf = 0.2 yn yr enghraifft hon. Mae hyn yn awgrymu y bydd 20% o'r data yn cael ei ddefnyddio fel y set brawf ac 80% fel y set hyfforddi. Ar ben hynny, rydym yn defnyddio cyflwr ar hap = 42 i sicrhau bod y data'n cael ei rannu'n gyson bob tro y bydd y cod yn cael ei berfformio.
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)
Paratoi'r Data
Pwrpas rhagbrosesu data yw ei baratoi ar gyfer ei gynnwys yn y model. Mae'r data'n cael ei brosesu ymlaen llaw yn y cod hwn trwy rannu pob pwynt data â 255.
Beth wnaeth ein hysgogi i gyflawni hyn? Mae normaleiddio yn weithdrefn ragbrosesu a ddefnyddir mewn dysgu peirianyddol i warantu bod yr holl nodweddion ar yr un raddfa. Yn y senario hwn, mae rhannu â 255 yn graddio'r data i ystod o 0 i 1, sy'n gam normaleiddio data llun arferol.
Mae hyn yn cyflymu cydgyfeiriant y model a gall gynyddu ei berfformiad.
X_train = X_train / 255.0
X_test = X_test / 255.0
Creu'r Modd
Rydym am adnabod yr unigolyn y mae ei wyneb yn ymddangos mewn llun. Yn yr achos hwn, byddwn yn defnyddio rhwydwaith cwbl gysylltiedig, a elwir yn aml yn rhwydwaith trwchus. Mae'n rhwydwaith niwral artiffisial a ddefnyddiwyd i greu'r model.
Mae rhwydweithiau niwral artiffisial yn cael eu modelu ar ôl sut mae'r ymennydd dynol yn gweithredu ac yn cael ei drefnu. Maent yn cynnwys nodau neu niwronau prosesu gwybodaeth sy'n gysylltiedig. Mae pob niwron mewn haen mewn rhwydwaith trwchus yn gysylltiedig â phob niwron yn yr haen uwch ei ben.
Mae gan y model bedair haen yn y cod hwn. I'w fwydo i'r haen nesaf, caiff y data mewnbwn ei fflatio yn yr haen gyntaf i mewn i gyfres un dimensiwn. Mae'r niwronau 128 a 64 yn y ddwy haen ganlynol, yn unol â hynny, wedi'u cysylltu'n llwyr.
Mae swyddogaeth actifadu ReLU yn swyddogaeth actifadu unigryw a ddefnyddir gan yr haenau hyn. Gyda hynny, gallwn gael y model i ddysgu cydberthynas aflinol rhwng y mewnbynnau a'r allbynnau. Mae'r haen olaf yn defnyddio'r swyddogaeth actifadu softmax i wneud rhagfynegiadau. Ac, mae'n haen gwbl gysylltiedig â chymaint o niwronau ag sydd o ddosbarthiadau posibl.
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')
])
Llunio'r Model
Mae'r model yn cael ei lunio gan ddefnyddio'r swyddogaeth "casglu". Mae angen inni baratoi’r model ar gyfer hyfforddiant. Felly, byddwn yn diffinio'r optimizer, y swyddogaeth golled, a'r metrigau a ddefnyddir i asesu'r model.
Yn ystod yr hyfforddiant, mae'r optimizer yn gyfrifol am newid paramedrau'r model. Mae'r optimizer “adam” yn dechneg optimeiddio dysgu dwfn boblogaidd.
Rydym yn defnyddio'r swyddogaeth golled i asesu perfformiad y model ar y data hyfforddi. Oherwydd bod y labeli targed yn gyfanrifau sy'n adlewyrchu dosbarth y ddelwedd yn hytrach na fectorau wedi'u hamgodio un-poeth, mae'r swyddogaeth colli "croesentropi categorïaidd gwasgaredig" yn ffafriol.
Yn olaf, rydym yn diffinio'r metrigau i asesu'r model, yn yr achos hwn, “cywirdeb”.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Hyfforddiant Model
Byddwn yn defnyddio'r swyddogaeth “ffit” i hyfforddi'r model.
Byddwn yn darparu'r data hyfforddi (trên X) a'r labeli cysylltiedig (y train), yn ogystal â gosod nifer y cyfnodau (iteriadau) i redeg fel 10. Mae'r weithdrefn hyfforddi yn addasu pwysau'r model i leihau colled (y gwahaniaeth rhwng labeli rhagweledig a real) a gwella cywirdeb data hyfforddi.
model.fit(X_train, y_train, epochs=10)
Gwerthusiad Model
Nawr, mae angen inni asesu'r model hyfforddedig ar ddata'r prawf. Rydym yn defnyddio'r golled prawf a defnyddir cywirdeb prawf i asesu perfformiad y model. Ar y prawf data prawf X a'r labeli prawf y prawf, mae angen inni alw "y swyddogaeth model.evaluate"
Mae'r swyddogaeth yn allbynnu cywirdeb y prawf a cholled prawf. Mae'r newidynnau prawf colled a chywirdeb prawf, yn y drefn honno, yn cynnwys y gwerthoedd hyn. Yn olaf, rydym yn defnyddio'r swyddogaeth “argraffu” i allbynnu cywirdeb y prawf.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Rhagfynegi Dosbarthiadau a Cael y Dosbarthiadau a Ragwelir
Gan ddefnyddio'r model hyfforddi a'r data prawf, mae'r algorithm yn gwneud rhagfynegiadau. Pan fydd data'r prawf yn cael ei drosglwyddo i'r dull “model.predict”, mae'n allbynnu amrywiaeth o ragfynegiadau ar gyfer pob llun yn y set prawf.
Yna mae enw'r dosbarth targed ar gyfer pob llun yn cael ei adfer o'r rhestr “enwau targed” gan ddefnyddio'r swyddogaeth “np.argmax” i nodi'r mynegai sydd â'r tebygolrwydd mwyaf a ragfynegir. Yna defnyddir y mynegai hwn i bennu'r dosbarth a ragwelir ar gyfer pob delwedd.
Gan ddefnyddio dealltwriaeth rhestr, mae'r holl ragfynegiadau yn yr arae “rhagfynegiadau” yn ddarostyngedig i'r dull hwn, gan arwain at y rhestr “dosbarthiadau a ragwelir”.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Delweddu'r Rhagfynegiadau
Nawr gallwn weld sut mae ein model yn edrych.
Er mwyn gwerthuso pa mor dda y mae'r model yn ei wneud, bydd y 10 llun cyntaf a'u rhagfynegiadau yn cael eu dangos. Bydd yn plotio'r lluniau ar raddfa lwyd ac yn arddangos dosbarth gwirioneddol y ddelwedd a'r dosbarth a ragfynegwyd gan y model gan ddefnyddio'r modiwl matplotlib.pyplot.
Mae'r swyddogaeth “imshow” yn cael ei defnyddio gan y ddolen for i blotio pob un o'r 10 llun set prawf cyntaf. Defnyddir enwau targed[y prawf[i]] a dosbarthiadau rhagfynegedig[i] i bennu dosbarth gwirioneddol y ddelwedd a'r dosbarth a ragfynegir, yn y drefn honno. Mae teitlau pob plot wedyn yn cael eu dynodi gan y dosbarthiadau hyn.
Yn olaf, mae'r plot yn cael ei arddangos gan ddefnyddio'r dull plt.show().
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()
Llwytho i fyny
Mae TensorFlow yn cynnig amgylchedd cyflawn a hyblyg ar gyfer creu modelau dysgu peiriannau.
Trwy fireinio'r model i fodloni gofynion penodol neu ychwanegu datblygiadau newydd mewn dysgu peiriannau, gellir cynyddu cywirdeb y model hyd yn oed ymhellach.
Mae'n debygol y bydd tensorFlow ac adnabyddiaeth wyneb yn cael eu defnyddio'n gynyddol mewn diwydiannau fel systemau diogelwch, dilysu biometrig, a gofal iechyd yn y dyfodol. Byddwn yn gweld arloesiadau hynod ddiddorol yn fuan.
Gadael ymateb