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 和面部识别可能会越来越多地用于安全系统、生物认证和医疗保健等行业。 我们很快就会看到引人入胜的创新。
发表评论