TensorFlow-ը բազմակողմանի գործիք է մեքենայական ուսուցման մոդելներ ստեղծելու համար:
Այս գրառման մեջ մենք կանդրադառնանք, թե ինչպես ստեղծել դեմքի ճանաչման համակարգ TensorFlow-ի միջոցով՝ բաց կոդով մեքենայական ուսուցման շրջանակ: Մենք կանցնենք դեմքի ճանաչման հաջող համակարգ ստեղծելու էական գործընթացներին՝ տվյալների հավաքագրումից և պատրաստումից մինչև մոդելի վերապատրաստում և գնահատում:
Դուք առաջին ձեռքից փորձ կստանաք TensorFlow-ի հետ՝ կոդերի հատվածների և իրական օրինակների օգնությամբ դեմքի ճանաչում ստեղծելու համար: Դուք կարող եք հետևել, մինչ մենք շարունակենք:
Ներածություն TensorFlow- ին
TensorFlow-ը անվճար և բաց կոդով գրադարան է: Այն խորհրդանշական մաթեմատիկական գործիքակազմ է, որն օգտագործում է տվյալների հոսքը և տարբերվող ծրագրավորումը: Դրանով դուք կարող եք կատարել մի շարք առաջադրանքներ, ներառյալ խորը նյարդային ցանց ուսուցում:
TensorFlow-ը հզոր և հարմարվողական է: Նմանապես, այն հիանալի գործիք է զարգացնելու և մեքենայական ուսուցման մոդելների տեղակայում. Դուք կարող եք կառուցել բարդ մոդելներ մի քանի շերտերով և թենզորային գործողություններով: Բացի այդ, գրադարանում նախապես կառուցված մոդելները կարող են ճշգրտորեն կարգավորվել հատուկ կարիքների համար:
Ավելին, TensorFlow-ն ունի հսկայական և ընդլայնվող օգտվողների համայնք: Այսպիսով, կա տեղեկատվության և օգնության առատություն այն անհատների համար, ովքեր նոր են հարթակում:
TensorFlow-ը հայտնի է Machine Learning մասամբ, քանի որ այն ապահովում է ավարտից մինչև վերջ աշխատանքային հոսք: Այսպիսով, դուք կարող եք հեշտությամբ կառուցել, վարժեցնել և տեղակայել մոդելներ: Այն տրամադրում է գործիքներ և ռազմավարություններ մոդելների բարելավման և մասշտաբավորման համար՝ հատուկ պահանջներին համապատասխան: Այն տատանվում է տվյալների նախնական մշակումից մինչև մոդելի տեղակայում:
Ի՞նչ է դեմքի ճանաչումը:
Դեմքի ճանաչումը ա համակարգչային տեսլական առաջադրանք, որը նույնականացնում է անձի նույնականացումը՝ հիմնվելով նրա դեմքի վրա: Այս տեխնիկան ճանաչում է դեմքի գծերը, ինչպիսիք են աչքերի, քթի և բերանի ձևն ու կառուցվածքը:
Եվ այն համեմատում է դրանք հայտնի դեմքերի տվյալների բազայի հետ՝ համընկնումը բացահայտելու համար: Դեմքի ճանաչումն ունի մի քանի կիրառություն, այդ թվում՝ անվտանգության համակարգեր, լուսանկարների կազմակերպում և կենսաչափական նույնականացում:
Դեմքի ճանաչման ալգորիթմների ճշգրտությունը վերջին տարիներին զգալիորեն աճել է մեքենայական ուսուցման ոլորտում առաջընթացի արդյունքում:
Անհրաժեշտ գրադարանների ներմուծում
Նախքան որևէ բան սկսելը, մենք պետք է ներմուծենք մեր մոդելի համար անհրաժեշտ գրադարանները: Tensorflow (tf) ներմուծվում և օգտագործվում է մոդելի ստեղծման և վերապատրաստման համար: <(p>
«Numpy»-ը կատարում է մաթեմատիկական հաշվարկներ և տվյալների մշակում:
«matplotlib.pyplot»-ը ներմուծվում է որպես plt և օգտագործվում է տվյալների գծապատկեր և պատկերացում.
Վերջապես, «fetch lfw people»-ը ներմուծվում է sklearn-ից: տվյալների հավաքածուներ և օգտագործվում են դեմքի ճանաչման տվյալների բազան բեռնելու համար: Այս գործառույթը scikit-learn գործիքակազմի մի մասն է: Այս ֆունկցիայի շնորհիվ մենք ստիպված չեղանք վերբեռնել այլ տվյալների հավաքածու: Սա արդեն կառուցված է sckit-learn-ում:
Եվ դա ձեզ հնարավորություն է տալիս մուտք գործել լայն շրջանակ տվյալների հավաքածուներ մեքենայական ուսուցման համար հավելվածներ։ Այս սցենարում մենք օգտագործում ենք «fetch lfw people» մեթոդը՝ «Labeled Faces in the Wild» (LFW) տվյալների բազան առբերելու համար: Այն ներառում է մարդկանց դեմքերի լուսանկարները, ինչպես նաև նրանց հետ կապված պիտակները:
Այս գրադարանները կարևոր նշանակություն ունեն դեմքի ճանաչման մեր մոդելի ներդրման և գնահատման հարցում:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Դեմքի ճանաչման տվյալների հավաքածուի նախնական մշակում և բեռնում
Այս մասում մենք օգտագործում ենք «fetch lfw people» ֆունկցիան՝ դեմքի ճանաչման տվյալները նախապես մշակելու համար: Նախ, մենք օգտագործում ենք fetch lfw մարդկանց «min faces per person=60» տարբերակով: Սա ցույց է տալիս, որ մենք ցանկանում ենք տվյալների բազայում ներառել միայն այն անձանց, ովքեր ունեն առնվազն 60 լուսանկար: Հետևաբար, մենք ապահովում ենք, որ մեր մոդելն ունի համապատասխան տվյալներ սովորելու համար: Բացի այդ, սա նվազեցնում է չափից ավելի հարմարվելու վտանգը:
Այնուհետև faces օբյեկտի տվյալները և պիտակները հանվում և վերագրվում են X և y փոփոխականներին: X հոլ.
Այժմ մենք պատրաստ ենք վարժեցնել դեմքի ճանաչման մեր մոդելը՝ օգտագործելով նախապես մշակված տվյալներ և պիտակներ:
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Ուսուցման և թեստային հավաքածուների բաժանում
Այս քայլում մենք բաժանում ենք մեր դեմքի ճանաչման տվյալների շտեմարանը երկու մասի՝ օգտագործելով sklearn.model-ի ընտրության գնացքի փորձարկման մեթոդը: Այս պառակտման նպատակն է գնահատել մեր մոդելի աշխատանքը մարզումից հետո
Գնացքի փորձարկման բաժանման ֆունկցիան ընդունում է որպես մուտքային տվյալներ X և y պիտակներ: Եվ դա դրանք բաժանում է վերապատրաստման և թեստային հավաքածուների: Այս օրինակում ընտրում ենք թեստի չափ=0.2: Սա ենթադրում է, որ տվյալների 20%-ը կօգտագործվի որպես թեստային հավաքածու, իսկ 80%-ը՝ որպես վերապատրաստման հավաքածու: Ավելին, մենք օգտագործում ենք պատահական վիճակ=42՝ ապահովելու համար, որ տվյալները հետևողականորեն բաժանվում են ամեն անգամ, երբ կոդն իրականացվում է:
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)
Տվյալների պատրաստում
Տվյալների նախնական մշակման նպատակն է պատրաստել դրանք մոդել մուտք գործելու համար: Տվյալները նախապես մշակվում են այս կոդում՝ յուրաքանչյուր տվյալների կետը բաժանելով 255-ի:
Ի՞նչը մեզ դրդեց հասնել դրան: Նորմալացումը նախամշակման ընթացակարգ է, որն օգտագործվում է մեքենայական ուսուցման մեջ՝ երաշխավորելու, որ բոլոր հատկանիշները նույն մասշտաբով են: Այս սցենարում, 255-ի բաժանելով, տվյալները սանդղակում են 0-ից 1-ի միջակայքում, ինչը նկարի տվյալների նորմալացման սովորական քայլ է:
Սա արագացնում է մոդելի մերձեցումը և կարող է մեծացնել դրա կատարումը:
X_train = X_train / 255.0
X_test = X_test / 255.0
Ռեժիմի ստեղծում
Մենք ցանկանում ենք բացահայտել այն անհատին, ում դեմքը երևում է նկարում: Այս դեպքում մենք կօգտագործենք լիովին միացված ցանց, որը հաճախ հայտնի է որպես խիտ ցանց: Դա արհեստական նեյրոնային ցանց է, որն օգտագործվել է մոդելի ստեղծման համար։
Արհեստական նեյրոնային ցանցերը մոդելավորվում են այն բանի համաձայն, թե ինչպես է աշխատում և կազմակերպվում մարդու ուղեղը: Դրանք կազմված են տեղեկատվության մշակման հանգույցներից կամ նեյրոններից, որոնք փոխկապակցված են: Խիտ ցանցի շերտի յուրաքանչյուր նեյրոն կապված է դրա վերևում գտնվող շերտի յուրաքանչյուր նեյրոնի հետ:
Այս ծածկագրում մոդելն ունի չորս շերտ: Հաջորդ շերտում սնվելու համար մուտքային տվյալները առաջին շերտում հարթվում են միաչափ զանգվածի մեջ: Հետևյալ երկու շերտերի 128 և 64 նեյրոնները, համապատասխանաբար, ամբողջությամբ կապված են միմյանց հետ։
ReLU ակտիվացման ֆունկցիան եզակի ակտիվացման ֆունկցիա է, որն օգտագործվում է այս շերտերի կողմից: Դրանով մենք կարող ենք մոդելից սովորել ոչ գծային հարաբերակցություններ մուտքերի և ելքերի միջև: Վերջին շերտը օգտագործում է softmax ակտիվացման գործառույթը կանխատեսումներ կատարելու համար: Եվ դա լիովին միացված շերտ է՝ այնքան նեյրոններով, որքան պոտենցիալ դասեր կան:
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')
])
Մոդելի կազմում
Մոդելը կազմվում է «կազմել» ֆունկցիայի միջոցով: Մենք պետք է պատրաստենք մոդելը վերապատրաստման համար: Այսպիսով, մենք կսահմանենք օպտիմիզատորը, կորստի գործառույթը և չափումները, որոնք կօգտագործվեն մոդելը գնահատելու համար:
Վերապատրաստման ընթացքում օպտիմիզատորը պատասխանատու է մոդելի պարամետրերը փոխելու համար: «Ադամ» օպտիմիզատորը խորը ուսուցման օպտիմալացման հանրաճանաչ տեխնիկա է:
Մենք օգտագործում ենք կորստի ֆունկցիան՝ վերապատրաստման տվյալների վրա մոդելի կատարողականությունը գնահատելու համար: Քանի որ թիրախային պիտակները ամբողջ թվեր են, որոնք արտացոլում են պատկերի դասը, այլ ոչ թե մեկ տաք կոդավորված վեկտորները, «նոսր կատեգորիկ խաչմերուկի» կորստի ֆունկցիան բարենպաստ է:
Ի վերջո, մենք սահմանում ենք մոդելը գնահատելու չափիչները, այս դեպքում՝ «ճշգրտությունը»:
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Մոդելների ուսուցում
Մոդելը մարզելու համար մենք կօգտագործենք «fit» ֆունկցիան:
Մենք կտրամադրենք ուսուցման տվյալները (X գնացք) և հարակից պիտակները (y գնացք), ինչպես նաև կսահմանենք դարաշրջանների (կրկնումների) թիվը 10-ով: Վերապատրաստման ընթացակարգը փոփոխում է մոդելի կշիռները՝ կորուստը նվազեցնելու համար (տարբերությունը դրանց միջև: կանխատեսված և իրական պիտակներ) և բարելավել վերապատրաստման տվյալների ճշգրտությունը:
model.fit(X_train, y_train, epochs=10)
Մոդելի գնահատում
Այժմ մենք պետք է գնահատենք վերապատրաստված մոդելը թեստի տվյալների վրա: Մենք օգտագործում ենք թեստի կորուստը և թեստի ճշգրտությունը՝ մոդելի արդյունավետությունը գնահատելու համար: Թեստի տվյալների X թեստի և թեստային պիտակների y թեստի վրա մենք պետք է կանչենք «model.evaluate ֆունկցիան»:
Ֆունկցիան ցույց է տալիս թեստի ճշգրտությունը և թեստի կորուստը: Համապատասխանաբար թեստի կորուստը և թեստի ճշգրտությունը պարունակում են այս արժեքները: Վերջապես, մենք օգտագործում ենք «տպել» ֆունկցիան՝ թեստի ճշգրտությունը դուրս բերելու համար:
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Դասերի կանխատեսում և կանխատեսված դասերի ստացում
Օգտագործելով վերապատրաստման մոդելը և թեստի տվյալները, ալգորիթմը կանխատեսումներ է անում: Երբ թեստի տվյալները փոխանցվում են «model.predict» մեթոդին, այն թողարկում է կանխատեսումների զանգված թեստային հավաքածուի յուրաքանչյուր նկարի համար:
Յուրաքանչյուր նկարի թիրախային դասի անվանումը այնուհետև վերցվում է «նպատակային անուններ» ցանկից՝ օգտագործելով «np.argmax» ֆունկցիան՝ մեծագույն կանխատեսված հավանականությամբ ինդեքսը նույնականացնելու համար: Այս ցուցանիշն այնուհետև օգտագործվում է յուրաքանչյուր պատկերի համար կանխատեսված դասը որոշելու համար:
Օգտագործելով ցուցակի ըմբռնումը, «կանխատեսումների» զանգվածի բոլոր կանխատեսումները ենթարկվում են այս մեթոդին, ինչը հանգեցնում է «կանխատեսված դասերի» ցանկին:
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Կանխատեսումների պատկերացում
Այժմ մենք կարող ենք տեսնել, թե ինչպիսի տեսք ունի մեր մոդելը:
Գնահատելու համար, թե որքան լավ է մոդելը, կցուցադրվեն առաջին 10 լուսանկարները և դրանց կանխատեսումները։ Այն գծագրելու է լուսանկարները մոխրագույն մասշտաբով և կցուցադրի պատկերի և՛ իրական դասը, և՛ մոդելի կողմից կանխատեսված դասը՝ օգտագործելով matplotlib.pyplot մոդուլը:
«imshow» ֆունկցիան օգտագործվում է for հանգույցի կողմից՝ գծագրելու առաջին 10 թեստային հավաքածուի լուսանկարներից յուրաքանչյուրը: Նպատակային անունները[y թեստ[i]] և կանխատեսված դասեր[i] օգտագործվում են համապատասխանաբար պատկերի իրական դասը և կանխատեսված դասը որոշելու համար: Այնուհետև յուրաքանչյուր հողամասի անվանումները նշվում են այս դասակարգումներով:
Վերջապես, սյուժեն ցուցադրվում է 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()
Փաթեթավորեք
TensorFlow-ն առաջարկում է ամբողջական և ճկուն միջավայր՝ մեքենայական ուսուցման մոդելներ ստեղծելու համար:
Որոշակի պահանջներին համապատասխանող մոդելը ճշգրտելով կամ մեքենայական ուսուցման նոր զարգացումներ ավելացնելով, մոդելի ճշգրտությունը կարող է էլ ավելի մեծանալ:
TensorFlow-ը և դեմքի ճանաչումը, հավանաբար, հետագայում ավելի շատ կօգտագործվեն այնպիսի ոլորտներում, ինչպիսիք են անվտանգության համակարգերը, կենսաչափական նույնականացումը և առողջապահությունը: Շուտով մենք կտեսնենք հետաքրքրաշարժ նորամուծություններ:
Թողնել գրառում