TensorFlow איז אַ ווערסאַטאַל געצייַג צו שאַפֿן מאַשין-לערנען מאָדעלס.
אין דעם פּאָסטן, מיר וועלן קוקן ווי צו שאַפֿן אַ פּנים דערקענונג סיסטעם מיט TensorFlow, אַן אָפֿן-מקור מאַשין לערנען פריימווערק. מיר וועלן דורכגיין די יקערדיק פּראַסעסאַז אין קריייטינג אַ געראָטן פּנים דערקענונג סיסטעם, פֿון זאַמלונג און פּריפּערינג דאַטן צו באַן און אַססעסס אַ מאָדעל.
איר וועט באַקומען ערשטער-האַנט דערפאַרונג מיט TensorFlow צו שאַפֿן פאַסיאַל דערקענונג מיט די הילף פון קאָד סניפּאַץ און פאַקטיש-וועלט ביישפילן. איר זענט באַגריסונג צו נאָכפאָלגן ווי מיר פאָרזעצן.
הקדמה צו טענסאָרפלאָוו
TensorFlow איז אַ פריי און אָפֿן-מקור ביבליאָטעק. עס איז אַ סימבאָליש מאַטאַמאַטיקאַל מכשירים וואָס ניצט דאַטאַפלאָוו און דיפערענטשייאַבאַל פּראָגראַממינג. איר קענען שעפּן אַ קייט פון טאַסקס מיט אים, אַרייַנגערעכנט טיף נעוראַל נעץ טריינינג.
TensorFlow איז שטאַרק און אַדאַפּטאַבאַל. פּונקט אַזוי, עס איז אַ גרויס געצייַג פֿאַר דעוועלאָפּינג און דיפּלויינג מאַשין לערנען מאָדעלס. איר קענען בויען קאָמפּליצירט מאָדעלס מיט עטלעכע לייַערס און טענסאָר אַפּעריישאַנז. אויך, פאַר-געבויט מאָדעלס אין דער ביבליאָטעק קענען זיין פיין-טונד פֿאַר ספּעציפיש באדערפענישן.
דערצו, TensorFlow האט אַ ריזיק און יקספּאַנדינג באַניצער קהל. אַזוי, עס איז אַ שעפע פון אינפֿאָרמאַציע און הילף פֿאַר מענטשן וואָס זענען נייַ צו דער פּלאַטפאָרמע.
TensorFlow איז פאָלקס פֿאַר מאַשין וויסן אין טייל ווייַל עס גיט אַ סוף-צו-סוף וואָרקפלאָוו. אַזוי איר קענען לייכט בויען, באַן און צעוויקלען מאָדעלס. עס גיט מכשירים און סטראַטעגיעס פֿאַר ימפּרוווינג און סקיילינג מאָדעלס צו פּאַסיק ספּעציפיש פאדערונגען. עס וועריז פון דאַטן פאַר-פּראַסעסינג צו מאָדעל דיפּלוימאַנט.
וואָס איז פּנים דערקענונג?
פּנים דערקענונג איז אַ קאָמפּיוטער זעאונג אַרבעט וואָס יידענאַפייד אַ מענטש 'ס לעגיטימאַציע באזירט אויף זייער פּנים. דעם טעכניק אנערקענט פיישאַל טרייץ, אַזאַ ווי די פאָרעם און געוועב פון די אויגן, נאָז און מויל.
און, עס קאַמפּערז זיי צו אַ דאַטאַבייס פון באַוווסט פנימער צו ידענטיפיצירן אַ גלייַכן. פּנים דערקענונג האט עטלעכע ניצט, אַרייַנגערעכנט זיכערהייט סיסטעמען, פאָטאָ אָרגאַניזאַציע און ביאָמעטריק אָטענטאַקיישאַן.
די אַקיעראַסי פון אַלגערידאַמז פֿאַר פּנים דערקענונג איז באטייטיק געוואקסן אין די לעצטע יאָרן ווי אַ רעזולטאַט פון ברייקטרוז אין מאַשין לערנען.
ימפּאָרטינג נויטיק ליבראַריעס
איידער איר אָנהייבן עפּעס, מיר דאַרפֿן צו אַרייַנפיר די לייברעריז דארף פֿאַר אונדזער מאָדעל. Tensorflow (tf) איז ימפּאָרטיד און יוטאַלייזד צו שאַפֿן און באַן די מאָדעל. <(פּ>
"נומפּי" פּערפאָרמז מאַטאַמאַטיקאַל חשבונות און דאַטן פּראַסעסינג.
"matplotlib.pyplot" איז ימפּאָרטיד ווי פּלט און געוויינט פֿאַר דאַטן טשאַרטינג און וויזשוואַלאַזיישאַנז.
צום סוף, "ברענגען lfw מענטשן" איז ימפּאָרטיד פֿון סקלעאַרן. דאַטאַסעץ און געניצט צו מאַסע די פיישאַל דערקענונג דאַטאַסעט. די פֿונקציע איז טייל פון די sikit-לערן טאָאָלקיט. דאַנק צו דעם פֿונקציע, מיר טאָן ניט האָבן צו ופּלאָאַד אן אנדער דאַטאַסעט. דאָס איז שוין געבויט אין sckit-learn.
און, עס גיט איר אַקסעס צו אַ ברייט קייט פון דאַטאַסעץ פֿאַר מאַשין לערנען אַפּלאַקיישאַנז. אין דעם סצענאַר, מיר נוצן די ברענגען lfw מענטשן אופֿן צו צוריקקריגן די "לייבאַלד פנימער אין די ווילד" (LFW) דאַטאַסעט. עס קאַמפּרייזיז פאָטאָס פון מענטשן ס פנימער ווי געזונט ווי די לאַבעלס וואָס זענען מיט זיי.
די לייברעריז זענען קריטיש אין די ימפּלאַמענטיישאַן און אפשאצונג פון אונדזער פּנים דערקענונג מאָדעל.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
פּרעפּראָסעססינג און לאָודינג די פאַסע רעקאָגניטיאָן דאַטאַסעט
אין דעם טייל, מיר נוצן די "פרייען lfw מענטשן" פֿונקציע צו פּריפּראָסעסס די פיישאַל דערקענונג דאַטן. ערשטער, מיר נוצן ברענגען lfw מענטשן מיט די אָפּציע "מינ פנימער פּער מענטש = 60". דאָס ינדיקייץ אַז מיר וועלן בלויז אַרייַננעמען מענטשן אין די דאַטאַסעט וואָס האָבן לפּחות 60 פאָטאָס. דעריבער, מיר ענשור אַז אונדזער מאָדעל האט טויגן דאַטן צו לערנען. אויך, דאָס לאָווערס די געפאַר פון אָוווערפיטטינג.
די דאַטן און לאַבעלס פון די פנימער אַבדזשעקץ זענען דעמאָלט יקסטראַקטיד און אַסיינד צו די וועריאַבאַלז X און י. X hol.
מיר זענען איצט גרייט צו באַן אונדזער פאַסיאַל דערקענונג מאָדעל ניצן פּרעפּראָסעססעד דאַטן און לאַבעלס.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
ספּליטינג טריינינג און טעסט סעץ
אין דעם שריט, מיר שפּאַלטן אונדזער דאַטאַסעט פֿאַר פּנים דערקענונג אין צוויי כאַווז ניצן די באַן פּרובירן שפּאַלטן אופֿן פון סקלעarn.model סעלעקציע. דער ציל פון דעם שפּאַלטן איז צו אַססעסס די פאָרשטעלונג פון אונדזער מאָדעל נאָך טריינינג
די באַן פּרובירן שפּאַלטן פֿונקציע אַקסעפּץ ווי ינפּוץ דאַטן X און לאַבעלס י. און, עס דיוויידז זיי אין טריינינג און פּרובירן שטעלט. מיר אויסקלייַבן פּרובירן גרייס = 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 אַקטאַוויישאַן פונקציע איז אַ יינציק אַקטאַוויישאַן פונקציע געניצט דורך די לייַערס. מיט דעם, מיר קענען באַקומען די מאָדעל צו לערנען ניט-לינעאַר קאָראַליישאַנז צווישן די ינפּוץ און אַוטפּוץ. די לעצטע שיכטע ניצט די סאָפטמאַקס אַקטאַוויישאַן פונקציע צו מאַכן פֿאָרויסזאָגן. און, עס איז אַ גאָר פארבונדן שיכטע מיט ווי פילע נוראַנז ווי עס זענען פּאָטענציעל קלאסן.
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'])
מאָדעל טראַינינג
מיר וועלן נוצן די "פּאַסיק" פֿונקציע צו באַן די מאָדעל.
מיר וועלן צושטעלן די טריינינג דאַטן (רענטגענ באַן) און פֿאַרבונדענע לאַבעלס (י באַן), ווי געזונט ווי באַשטעטיקן די נומער פון עפּאָס (יטעריישאַנז) צו לויפן ווי 10. די טריינינג פּראָצעדור מאַדאַפייז די מאָדעל ווייץ צו רעדוצירן אַ אָנווער (די חילוק צווישן פּרעדיקטעד און פאַקטיש לאַבעלס) און פֿאַרבעסערן די אַקיעראַסי פון טריינינג דאַטן.
model.fit(X_train, y_train, epochs=10)
מאָדעל עוואַלואַטיאָן
איצט מיר דאַרפֿן צו אַססעסס די טריינד מאָדעל אויף די פּראָבע דאַטן. מיר נוצן די פּראָבע אָנווער און פּרובירן אַקיעראַסי זענען געניצט צו אַססעסס די פאָרשטעלונג פון די מאָדעל. אויף די פּראָבע דאַטן X פּרובירן און די פּראָבע לאַבעלס י פּרובירן, מיר דאַרפֿן צו רופן "די מאָדעל.עוואַלואַטע פֿונקציע"
די פֿונקציע אַוטפּוץ די פּרובירן אַקיעראַסי און פּרובירן אָנווער. די וועריאַבאַלז פּרובירן אָנווער און פּרובירן אַקיעראַסי, ריספּעקטיוולי, אַנטהאַלטן די וואַלועס. צום סוף, מיר נוצן די "פּרינט" פֿונקציע צו רעזולטאַט די פּרובירן אַקיעראַסי.
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 מאָדולע.
די "ימשאָוו" פֿונקציע איז געניצט דורך די פֿאַר שלייף צו פּלאַנעווען יעדער פון די ערשטער 10 טעסט סעט פאָטאָס. ציל נעמען [y test[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 און פאַסיאַל דערקענונג וועט מסתּמא זיין ינקריסינגלי געניצט אין ינדאַסטריז ווי זיכערהייט סיסטעמען, ביאָמעטריק אָטענטאַקיישאַן און כעלטקער אין דער צוקונפֿט. מיר וועלן באַלד זען פאַסאַנייטינג ינאָווויישאַנז.
לאָזן אַ ענטפֿערן