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 people 方法來檢索“野外標記面孔”(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 people 選項“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 selection 的 train test split 方法將人臉識別數據集分成兩半。 這種拆分的目的是評估我們模型在訓練後的表現
train test split 函數接受數據 X 和標籤 y 作為輸入。 並且,它將它們分為訓練集和測試集。 我們在本例中選擇 test size=0.2。 這意味著 20% 的數據將用作測試集,80% 的數據將用作訓練集。 再者,我們使用random state=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')
])
模型的編譯
該模型是使用“編譯”功能編譯的。 我們需要準備模型進行訓練。 因此,我們將定義用於評估模型的優化器、損失函數和指標。
在訓練期間,優化器負責更改模型的參數。 “adam”優化器是一種流行的深度學習優化技術。
我們使用損失函數來評估模型在訓練數據上的表現。 因為目標標籤是反映圖像類別的整數而不是單熱編碼向量,所以“稀疏分類交叉熵”損失函數是有利的。
最後,我們定義評估模型的指標,在本例中為“準確性”。
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
模型訓練
我們將使用“擬合”函數來訓練模型。
我們將提供訓練數據(X train)和相關標籤(y train),並將運行的時期(迭代)數設置為 10。訓練過程修改模型權重以減少損失(兩者之間的差異預測和真實標籤)並提高訓練數據的準確性。
model.fit(X_train, y_train, epochs=10)
模型評估
現在,我們需要在測試數據上評估經過訓練的模型。 我們使用測試損失和測試準確率來評估模型的性能。 在測試數據 X test 和測試標籤 y test 上,我們需要調用“model.evaluate function”
該函數輸出測試精度和測試損失。 變量測試損失和測試準確度分別包含這些值。 最後,我們使用“打印”功能輸出測試準確率。
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 模塊預測的類別。
for 循環使用“imshow”函數繪製前 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 和麵部識別可能會越來越多地用於安全系統、生物認證和醫療保健等行業。 我們很快就會看到引人入勝的創新。
發表評論