TensorFlow એ મશીન-લર્નિંગ મૉડલ બનાવવાનું બહુમુખી સાધન છે.
આ પોસ્ટમાં, અમે TensorFlow, એક ઓપન-સોર્સ મશીન લર્નિંગ ફ્રેમવર્ક સાથે ફેસ રેકગ્નિશન સિસ્ટમ કેવી રીતે બનાવવી તે જોઈશું. અમે સફળ ચહેરો ઓળખ પ્રણાલી બનાવવા માટે જરૂરી પ્રક્રિયાઓ પર જઈશું, ડેટા એકત્ર કરવા અને તૈયાર કરવાથી લઈને મોડેલને તાલીમ આપવા અને મૂલ્યાંકન કરવા સુધી.
કોડ સ્નિપેટ્સ અને વાસ્તવિક દુનિયાના ઉદાહરણોની મદદથી ચહેરાની ઓળખ બનાવવા માટે તમને TensorFlow સાથે પ્રથમ હાથનો અનુભવ મળશે. અમે આગળ વધીએ તેમ અનુસરવા માટે તમારું સ્વાગત છે.
ટેન્સરફ્લોની રજૂઆત
TensorFlow એ એક મફત અને ઓપન સોર્સ લાઇબ્રેરી છે. તે એક સાંકેતિક ગણિત ટૂલબોક્સ છે જે ડેટાફ્લો અને ડિફરન્સિએબલ પ્રોગ્રામિંગનો ઉપયોગ કરે છે. તમે તેની સાથે ડીપ સહિત અનેક કાર્યોને હેન્ડલ કરી શકો છો મજ્જાતંતુકીય નેટવર્ક તાલીમ
ટેન્સરફ્લો શક્તિશાળી અને સ્વીકાર્ય છે. તેવી જ રીતે, તે વિકાસ માટે એક મહાન સાધન છે અને મશીન લર્નિંગ મોડલ્સનો ઉપયોગ. તમે અનેક સ્તરો અને ટેન્સર કામગીરી સાથે જટિલ મોડલ બનાવી શકો છો. ઉપરાંત, લાઇબ્રેરીમાં પૂર્વ-બિલ્ટ મોડલ્સ ચોક્કસ જરૂરિયાતો માટે ફાઇન-ટ્યુન કરી શકાય છે.
વધુમાં, TensorFlow પાસે વિશાળ અને વિસ્તરતો વપરાશકર્તા સમુદાય છે. તેથી, પ્લેટફોર્મ પર નવા હોય તેવા વ્યક્તિઓ માટે માહિતી અને મદદની ભરમાર છે.
TensorFlow માટે લોકપ્રિય છે મશીન શિક્ષણ અંશતઃ કારણ કે તે એન્ડ-ટુ-એન્ડ વર્કફ્લો પ્રદાન કરે છે. તેથી, તમે સરળતાથી મોડેલો બનાવી શકો છો, તાલીમ આપી શકો છો અને જમાવટ કરી શકો છો. તે ચોક્કસ માંગણીઓને ફિટ કરવા માટે મોડલ્સને સુધારવા અને સ્કેલિંગ કરવા માટે સાધનો અને વ્યૂહરચનાઓ પ્રદાન કરે છે. તે ડેટા પ્રી-પ્રોસેસિંગથી લઈને મોડલ ડિપ્લોયમેન્ટ સુધી બદલાય છે.
ફેસ રેકગ્નિશન શું છે?
ચહેરાની ઓળખ એ છે કમ્પ્યુટર દ્રષ્ટિ કાર્ય કે જે વ્યક્તિના ચહેરાના આધારે તેની ઓળખ ઓળખે છે. આ તકનીક ચહેરાના લક્ષણોને ઓળખે છે, જેમ કે આંખો, નાક અને મોંનો આકાર અને રચના.
અને, તે મેચને ઓળખવા માટે જાણીતા ચહેરાના ડેટાબેઝ સાથે તેમની સરખામણી કરે છે. ફેસ રેકગ્નિશનના ઘણા ઉપયોગો છે, જેમાં સુરક્ષા સિસ્ટમ, ફોટો ઓર્ગેનાઈઝેશન અને બાયોમેટ્રિક ઓથેન્ટિકેશનનો સમાવેશ થાય છે.
તાજેતરના વર્ષોમાં મશીન લર્નિંગમાં પ્રગતિના પરિણામે ચહેરાની ઓળખના અલ્ગોરિધમ્સની ચોકસાઈમાં નોંધપાત્ર વધારો થયો છે.
જરૂરી પુસ્તકાલયો આયાત કરી રહ્યા છીએ
કંઈપણ શરૂ કરતા પહેલા, અમારે અમારા મોડેલ માટે જરૂરી પુસ્તકાલયો આયાત કરવાની જરૂર છે. ટેન્સરફ્લો (tf) આયાત કરવામાં આવે છે અને મોડેલ બનાવવા અને તાલીમ આપવા માટે ઉપયોગમાં લેવાય છે. <(p>
"numpy" ગાણિતિક ગણતરીઓ અને ડેટા પ્રોસેસિંગ કરે છે.
"matplotlib.pyplot" plt તરીકે આયાત કરવામાં આવે છે અને તેના માટે વપરાય છે ડેટા ચાર્ટિંગ અને વિઝ્યુલાઇઝેશન.
છેલ્લે, "લેવા lfw લોકો" sklearn માંથી આયાત કરવામાં આવે છે. ડેટાસેટ્સ અને ચહેરાની ઓળખ ડેટાસેટ લોડ કરવા માટે વપરાય છે. આ ફંક્શન સ્કીટ-લર્ન ટૂલકીટનો ભાગ છે. આ કાર્ય માટે આભાર અમારે અન્ય ડેટાસેટ અપલોડ કરવાની જરૂર નથી. આ પહેલેથી જ સ્કિટ-લર્નમાં બિલ્ટ છે.
અને, તે તમને વિશાળ શ્રેણીની ઍક્સેસ આપે છે મશીન લર્નિંગ માટે ડેટાસેટ્સ એપ્લિકેશન્સ આ દૃશ્યમાં, અમે "લેબલવાળા ફેસ ઇન ધ વાઇલ્ડ" (LFW) ડેટાસેટને પુનઃપ્રાપ્ત કરવા માટે lfw people મેળવો પદ્ધતિનો ઉપયોગ કરીએ છીએ. તેમાં લોકોના ચહેરાના ફોટા તેમજ તેમની સાથેના લેબલનો સમાવેશ થાય છે.
આ પુસ્તકાલયો અમારા ચહેરાની ઓળખ મોડેલના અમલીકરણ અને મૂલ્યાંકનમાં મહત્વપૂર્ણ છે.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
ફેસ રેકગ્નિશન ડેટાસેટની પ્રીપ્રોસેસિંગ અને લોડિંગ
આ ભાગમાં, અમે ચહેરાની ઓળખ ડેટાને પ્રીપ્રોસેસ કરવા માટે "ફેચ lfw લોકો" ફંક્શનનો ઉપયોગ કરીએ છીએ. પ્રથમ, અમે "min faces per person=60" વિકલ્પ સાથે ftch lfw લોકોનો ઉપયોગ કરીએ છીએ. આ સૂચવે છે કે અમે ફક્ત તે જ વ્યક્તિઓને ડેટાસેટમાં સામેલ કરવા માંગીએ છીએ જેમની પાસે ઓછામાં ઓછા 60 ફોટા હોય. આથી, અમે સુનિશ્ચિત કરીએ છીએ કે અમારા મોડલમાં શીખવા માટે પર્યાપ્ત ડેટા છે. ઉપરાંત, આ ઓવરફિટિંગના જોખમને ઘટાડે છે.
ફેસ ઓબ્જેક્ટમાંથી ડેટા અને લેબલ્સ પછી એક્સટ્રેક્ટ કરવામાં આવે છે અને X અને y વેરીએબલ્સને સોંપવામાં આવે છે. એક્સ હોલ.
અમે હવે પ્રીપ્રોસેસ્ડ ડેટા અને લેબલનો ઉપયોગ કરીને અમારા ચહેરાની ઓળખ મૉડલને તાલીમ આપવા માટે તૈયાર છીએ.
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 સક્રિયકરણ કાર્ય એ આ સ્તરો દ્વારા ઉપયોગમાં લેવાતું અનન્ય સક્રિયકરણ કાર્ય છે. તેની સાથે, અમે ઇનપુટ્સ અને આઉટપુટ વચ્ચે બિન-રેખીય સહસંબંધ શીખવા માટે મોડેલ મેળવી શકીએ છીએ. છેલ્લું સ્તર અનુમાન કરવા માટે સોફ્ટમેક્સ સક્રિયકરણ કાર્યનો ઉપયોગ કરે છે. અને, તે સંભવિત વર્ગો જેટલા ન્યુરોન્સ સાથે સંપૂર્ણ રીતે જોડાયેલ સ્તર છે.
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'])
મોડલ તાલીમ
અમે મોડેલને તાલીમ આપવા માટે "ફિટ" ફંક્શનનો ઉપયોગ કરીશું.
અમે પ્રશિક્ષણ ડેટા (X ટ્રેન) અને સંબંધિત લેબલ્સ (વાય ટ્રેન) પ્રદાન કરીશું, તેમજ યુગની સંખ્યા (પુનરાવર્તનો) 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" ફંક્શનનો ઉપયોગ લૂપ દ્વારા પ્રથમ 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 મશીન લર્નિંગ મોડલ બનાવવા માટે સંપૂર્ણ અને લવચીક વાતાવરણ પ્રદાન કરે છે.
ચોક્કસ આવશ્યકતાઓને પૂર્ણ કરવા માટે મોડલને ફાઇન-ટ્યુનિંગ કરીને અથવા મશીન લર્નિંગમાં નવા વિકાસને ઉમેરીને, મોડલની ચોકસાઈને હજુ પણ વધારી શકાય છે.
ભવિષ્યમાં સુરક્ષા પ્રણાલીઓ, બાયોમેટ્રિક પ્રમાણીકરણ અને આરોગ્યસંભાળ જેવા ઉદ્યોગોમાં ટેન્સરફ્લો અને ચહેરાની ઓળખનો વધુને વધુ ઉપયોગ થવાની સંભાવના છે. અમે ટૂંક સમયમાં આકર્ષક નવીનતાઓ જોઈશું.
એક જવાબ છોડો