TensorFlow არის მრავალმხრივი ინსტრუმენტი მანქანური სწავლების მოდელების შესაქმნელად.
ამ პოსტში ჩვენ განვიხილავთ, თუ როგორ შევქმნათ სახის ამოცნობის სისტემა TensorFlow-ით, ღია კოდის მანქანური სწავლების ჩარჩო. ჩვენ განვიხილავთ არსებით პროცესებს წარმატებული სახის ამოცნობის სისტემის შესაქმნელად, მონაცემების შეგროვებიდან და მომზადებიდან მოდელის მომზადებამდე და შეფასებამდე.
თქვენ მიიღებთ პირველ გამოცდილებას TensorFlow-ით, რათა შექმნათ სახის ამოცნობა კოდის ფრაგმენტებისა და რეალური სამყაროს მაგალითების დახმარებით. მოგესალმებათ, რომ მიჰყვეთ ჩვენ გაგრძელებას.
TensorFlow- ის შესავალი
TensorFlow არის უფასო და ღია წყაროს ბიბლიოთეკა. ეს არის მათემატიკის სიმბოლური ინსტრუმენტების ყუთი, რომელიც იყენებს მონაცემთა ნაკადს და დიფერენცირებად პროგრამირებას. მასთან ერთად შეგიძლიათ გაუმკლავდეთ სხვადასხვა ამოცანებს, მათ შორის ღრმა ნერვული ქსელის სასწავლო.
TensorFlow არის ძლიერი და ადაპტირებადი. ანალოგიურად, ეს არის შესანიშნავი ინსტრუმენტი განვითარებისთვის და მანქანათმცოდნეობის მოდელების დანერგვა. თქვენ შეგიძლიათ ააწყოთ რთული მოდელები რამდენიმე ფენით და ტენსორის ოპერაციებით. ასევე, ბიბლიოთეკაში წინასწარ აშენებული მოდელები შეიძლება დაზუსტდეს კონკრეტული საჭიროებისთვის.
გარდა ამისა, TensorFlow-ს აქვს უზარმაზარი და გაფართოებული მომხმარებლის საზოგადოება. ასე რომ, არსებობს უამრავი ინფორმაცია და დახმარება იმ პირებისთვის, რომლებიც ახალი არიან პლატფორმაზე.
TensorFlow პოპულარულია მანქანა სწავლის ნაწილობრივ იმიტომ, რომ ის უზრუნველყოფს ბოლომდე სამუშაო პროცესს. ასე რომ, თქვენ შეგიძლიათ მარტივად ააწყოთ, მოამზადოთ და განათავსოთ მოდელები. ის უზრუნველყოფს ინსტრუმენტებსა და სტრატეგიებს მოდელების გაუმჯობესებისა და მასშტაბის სპეციფიკური მოთხოვნების შესაბამისად. ის განსხვავდება მონაცემთა წინასწარი დამუშავებიდან მოდელის განთავსებამდე.
რა არის სახის ამოცნობა?
სახის ამოცნობა არის ა კომპიუტერული ხედვა დავალება, რომელიც განსაზღვრავს პიროვნების იდენტიფიკაციას მისი სახის მიხედვით. ეს ტექნიკა აღიარებს სახის თვისებებს, როგორიცაა თვალების, ცხვირისა და პირის ფორმა და ტექსტურა.
და ის ადარებს მათ ცნობილი სახეების მონაცემთა ბაზას, რათა იდენტიფიცირდეს მატჩი. სახის ამოცნობას აქვს რამდენიმე გამოყენება, მათ შორის უსაფრთხოების სისტემები, ფოტო ორგანიზება და ბიომეტრიული ავთენტიფიკაცია.
სახის ამოცნობის ალგორითმების სიზუსტე არსებითად გაიზარდა ბოლო წლებში მანქანური სწავლების მიღწევების შედეგად.
საჭირო ბიბლიოთეკების იმპორტი
სანამ რაიმეს დავიწყებთ, ჩვენ უნდა შემოვიტანოთ ჩვენი მოდელისთვის საჭირო ბიბლიოთეკები. Tensorflow (tf) იმპორტირებულია და გამოიყენება მოდელის შესაქმნელად და მომზადებისთვის. <(p>
"Numpy" ასრულებს მათემატიკურ გამოთვლებს და მონაცემთა დამუშავებას.
„matplotlib.pyplot“ იმპორტირებულია როგორც plt და გამოიყენება ამ მიზნით მონაცემთა დიაგრამა და ვიზუალიზაცია.
საბოლოოდ, "fetch lfw people" შემოტანილია sklearn-დან. მონაცემთა ნაკრები და გამოიყენება სახის ამოცნობის მონაცემთა ნაკრების ჩასატვირთად. ეს ფუნქცია არის scikit-learn ინსტრუმენტარიუმის ნაწილი. ამ ფუნქციის წყალობით ჩვენ არ დაგვჭირდა სხვა მონაცემთა ატვირთვა. ეს უკვე ჩაშენებულია Sckit-learn-ში.
და ეს გაძლევთ წვდომას ფართო სპექტრზე მონაცემთა ნაკრები მანქანათმცოდნეობისთვის აპლიკაციები. ამ სცენარში, ჩვენ ვიყენებთ fetch lfw ხალხის მეთოდს, რათა მოვიძიოთ „ეტიკეტირებული სახეები ველურ ბუნებაში“ (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 ადამიანების ოფციით „მინ. სახეები ერთ ადამიანზე=60“. ეს მიუთითებს იმაზე, რომ ჩვენ გვსურს მონაცემთა ნაკრებში შევიტანოთ მხოლოდ ადამიანები, რომლებსაც აქვთ მინიმუმ 60 ფოტო. აქედან გამომდინარე, ჩვენ უზრუნველვყოფთ, რომ ჩვენს მოდელს აქვს ადეკვატური მონაცემები შესასწავლად. გარდა ამისა, ეს ამცირებს ზედმეტი მორგების რისკს.
სახეები ობიექტიდან მონაცემები და ეტიკეტები შემდეგ ამოღებულია და ენიჭება X და y ცვლადებს. X hol.
ჩვენ მზად ვართ ვივარჯიშოთ ჩვენი სახის ამოცნობის მოდელი წინასწარ დამუშავებული მონაცემებისა და ეტიკეტების გამოყენებით.
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 loop-ის მიერ პირველი 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 და სახის ამოცნობა, სავარაუდოდ, უფრო მეტად იქნება გამოყენებული ინდუსტრიებში, როგორიცაა უსაფრთხოების სისტემები, ბიომეტრიული ავთენტიფიკაცია და ჯანდაცვა მომავალში. ჩვენ მალე ვიხილავთ მომხიბლავ ინოვაციებს.
დატოვე პასუხი