TensorFlow бол машин сурах загвар үүсгэх олон талын хэрэгсэл юм.
Энэ нийтлэлд бид нээлттэй эхийн машин сургалтын систем болох TensorFlow ашиглан царай таних системийг хэрхэн бүтээх талаар авч үзэх болно. Бид амжилттай царай таних системийг бий болгоход өгөгдөл цуглуулах, бэлтгэхээс эхлээд загварыг сургах, үнэлэх зэрэг чухал үйл явцыг авч үзэх болно.
Та TensorFlow программыг ашиглан нүүр царайг таних, кодын хэсэг болон бодит жишээнүүдийг ашиглан өөрийн биеэр туршлага хуримтлуулах болно. Биднийг цааш үргэлжлүүлэхэд та бүхнийг урьж байна.
TensorFlow-ийн танилцуулга
TensorFlow бол үнэгүй, нээлттэй эхийн номын сан юм. Энэ нь өгөгдлийн урсгал болон дифференциал програмчлалыг ашигладаг симбол математикийн хэрэгслийн хайрцаг юм. Та үүнтэй хамт олон төрлийн ажлыг, тэр дундаа гүнийг даван туулж чадна мэдрэлийн сүлжээ сургалт.
TensorFlow нь хүчирхэг бөгөөд дасан зохицох чадвартай. Үүний нэгэн адил, энэ нь хөгжүүлэх маш сайн хэрэгсэл юм машин сургалтын загваруудыг нэвтрүүлэх. Та хэд хэдэн давхарга, тензорын ажиллагаатай төвөгтэй загваруудыг барьж болно. Мөн номын санд урьдчилан бэлтгэсэн загваруудыг тодорхой хэрэгцээнд тохируулан өөрчилж болно.
Цаашилбал, TensorFlow нь асар том, өргөжиж буй хэрэглэгчийн нийгэмлэгтэй. Тиймээс платформд шинээр нэвтэрч буй хүмүүст зориулсан маш олон мэдээлэл, тусламж байдаг.
TensorFlow нь алдартай машин суралцах Учир нь энэ нь төгсгөл хүртэлх ажлын урсгалыг хангадаг. Тиймээс та загвараа хялбархан барьж, сургаж, байрлуулж болно. Энэ нь тодорхой эрэлт хэрэгцээнд нийцүүлэн загваруудыг сайжруулах, өргөжүүлэх арга хэрэгсэл, стратегиар хангадаг. Энэ нь өгөгдлийг урьдчилан боловсруулахаас эхлээд загвар байршуулалт хүртэл өөр өөр байдаг.
Нүүр таних гэж юу вэ?
Нүүр царай таних нь a компьютерийн алсын хараа хүний нүүр царайгаар нь ялгаж таних даалгавар. Энэ техник нь нүд, хамар, амны хэлбэр, бүтэц гэх мэт нүүрний онцлогийг таньдаг.
Мөн энэ нь таарч тохирохыг тодорхойлохын тулд мэддэг царайны мэдээллийн сантай харьцуулдаг. Царай таних нь хамгаалалтын систем, гэрэл зургийн зохион байгуулалт, биометрийн баталгаажуулалт зэрэг хэд хэдэн хэрэглээтэй.
Сүүлийн жилүүдэд машин сургалтын нээлтийн үр дүнд царай таних алгоритмуудын нарийвчлал эрс нэмэгдсэн.
Шаардлагатай номын санг импортлох
Аливаа зүйлийг эхлүүлэхийн өмнө бид загвартаа шаардлагатай номын сангуудыг импортлох хэрэгтэй. Загвар үүсгэх, сургахад Tensorflow (tf)-г импортлон ашигладаг. <(p>
"numpy" нь математик тооцоолол, өгөгдөл боловсруулах ажлыг гүйцэтгэдэг.
“matplotlib.pyplot” нь plt хэлбэрээр импортлогдож, ашиглагддаг өгөгдлийн график, дүрслэл.
Эцэст нь "Ftch lfw people" -ийг sklearn-аас оруулж ирдэг. өгөгдлийн багц болон царай таних мэдээллийн багцыг ачаалахад ашигладаг. Энэ функц нь scikit-learn хэрэгслийн нэг хэсэг юм. Энэ функцийн ачаар бид өөр мэдээллийн багц байршуулах шаардлагагүй болсон. Үүнийг аль хэдийн sckit-learn-д суулгасан.
Мөн энэ нь танд өргөн хүрээний хандалт хийх боломжийг олгоно машин сургалтын мэдээллийн багц програмууд. Энэ хувилбарт бид "Зэрлэг байгальд хаяглагдсан царай" (LFW) өгөгдлийн багцыг сэргээхийн тулд fetch lfw people аргыг ашигладаг. Энэ нь хүмүүсийн царайны гэрэл зураг, мөн тэдэнтэй хавсарсан шошготой.
Эдгээр номын сангууд нь бидний царайг таних загварыг хэрэгжүүлэх, үнэлэхэд чухал үүрэгтэй.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Царай таних мэдээллийн багцыг урьдчилан боловсруулж, ачаалж байна
Энэ хэсэгт бид нүүр таних өгөгдлийг урьдчилан боловсруулахын тулд "Ftch lfw people" функцийг ашигладаг. Нэгдүгээрт, бид "хүнд ногдох хамгийн бага нүүр=60" гэсэн сонголттой fetch lfw people ашигладаг. Энэ нь бид зөвхөн 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')
])
Загвар бүрдүүлэх
Уг загварыг “compile” функцийг ашиглан эмхэтгэсэн. Бид загвараа сургалтанд бэлтгэх хэрэгтэй. Тиймээс бид загварыг үнэлэхэд ашиглагдах оновчлогч, алдагдлын функц, хэмжигдэхүүнийг тодорхойлох болно.
Сургалтын явцад оптимизатор нь загварын параметрүүдийг өөрчлөх үүрэгтэй. "Адам" оновчлогч нь гүнзгий суралцах оновчлолын түгээмэл арга юм.
Сургалтын өгөгдөл дээрх загварын гүйцэтгэлийг үнэлэхийн тулд бид алдагдал функцийг ашигладаг. Зорилтот шошгууд нь нэг халуун кодлогдсон вектор биш харин зургийн ангиллыг тусгасан бүхэл тоо байдаг тул "сийрэг категорик кроссентропи" алдагдлын функц нь таатай байна.
Эцэст нь бид загварыг үнэлэх хэмжүүрүүдийг тодорхойлдог бөгөөд энэ тохиолдолд "нарийвчлал" юм.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Загварын сургалт
Загварыг сургахдаа бид "тохирох" функцийг ашиглана.
Бид сургалтын өгөгдөл (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 болон царай таних нь ирээдүйд аюулгүй байдлын систем, биометрийн баталгаажуулалт, эрүүл мэндийн үйлчилгээ зэрэг салбарт улам бүр ашиглагдах болно. Бид тун удахгүй гайхалтай шинэлэг зүйлсийг харах болно.
хариу үлдээх