深度卷积神经网络人脸识别实战:示例代码及训练过程
深度卷积神经网络人脸识别实战:示例代码及训练过程
本文将介绍如何使用深度卷积神经网络进行人脸识别,并提供一个简单的示例代码。代码使用Python和TensorFlow深度学习框架,并包含以下步骤:
- 构建深度卷积神经网络
- 加载人脸数据集
- 训练模型
- 测试模型
1. 构建深度卷积神经网络
import tensorflow as tf
import numpy as np
import os
# 构建深度卷积神经网络
def build_model():
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(100,100,3)),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
return model
在这个示例代码中,我们构建了一个包含4个卷积层和3个全连接层的深度卷积神经网络。每个卷积层都使用了ReLU激活函数,并使用MaxPooling层进行降采样。最后,我们使用一个全连接层将特征向量映射到一个二进制分类输出。
2. 加载人脸数据集
# 加载数据集
def load_data():
data_dir = 'faces'
train_dir = os.path.join(data_dir, 'train')
validation_dir = os.path.join(data_dir, 'validation')
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
validation_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(100,100),
batch_size=20,
class_mode='binary'
)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=(100,100),
batch_size=20,
class_mode='binary'
)
return train_generator, validation_generator
我们使用ImageDataGenerator类来加载和预处理人脸数据集。数据集被分为训练集和验证集,每个图像都被调整到100x100像素,并进行了归一化处理。
3. 训练模型
# 训练模型
def train_model(model, train_generator, validation_generator):
model.compile(loss='binary_crossentropy',
optimizer=tf.keras.optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=30,
validation_data=validation_generator,
validation_steps=50
)
return history
我们使用交叉熵损失函数和RMSprop优化器来训练模型,并设置学习率为1e-4。训练过程持续30个epochs,并使用验证集来评估模型的性能。
4. 测试模型
# 测试模型
def test_model(model):
test_dir = 'faces/test'
test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(100,100),
batch_size=20,
class_mode='binary'
)
test_loss, test_acc = model.evaluate_generator(test_generator, steps=50)
print('Test accuracy:', test_acc)
最后,我们使用测试集来评估模型的泛化能力,并打印测试集上的准确率。
完整代码
import tensorflow as tf
import numpy as np
import os
# 构建深度卷积神经网络
def build_model():
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(100,100,3)),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
return model
# 加载数据集
def load_data():
data_dir = 'faces'
train_dir = os.path.join(data_dir, 'train')
validation_dir = os.path.join(data_dir, 'validation')
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
validation_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(100,100),
batch_size=20,
class_mode='binary'
)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=(100,100),
batch_size=20,
class_mode='binary'
)
return train_generator, validation_generator
# 训练模型
def train_model(model, train_generator, validation_generator):
model.compile(loss='binary_crossentropy',
optimizer=tf.keras.optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=30,
validation_data=validation_generator,
validation_steps=50
)
return history
# 测试模型
def test_model(model):
test_dir = 'faces/test'
test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(100,100),
batch_size=20,
class_mode='binary'
)
test_loss, test_acc = model.evaluate_generator(test_generator, steps=50)
print('Test accuracy:', test_acc)
# 主函数
def main():
model = build_model()
train_generator, validation_generator = load_data()
history = train_model(model, train_generator, validation_generator)
test_model(model)
if __name__ == '__main__':
main()
注意:
- 以上代码只是一个简单的示例,你可以根据你的具体需求进行调整。
- 你需要自己准备人脸数据集,并将其分为训练集、验证集和测试集。
- 你可以根据你的硬件配置调整训练参数,例如epochs和batch_size。
希望本文对你有所帮助!
原文地址: https://www.cveoy.top/t/topic/owdw 著作权归作者所有。请勿转载和采集!