Keras-深度学习-神经网络-人脸识别模型

news2024/11/18 15:50:37

目录

模型搭建

模型训练


模型搭建

①导入所需的库,导入了 Keras 和其他必要的库,用于构建和处理图像数据。

from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
import os
from PIL import Image
import numpy

②加载人脸数据并进行处理,并将其划分为训练集和测试集。每个人的图像按顺序排列,训练集包含每个人前6张图像,测试集包含剩余的图像。每个图像都被转换为像素值列表,并与相应的标签一起存储。

picture_path = r"C:\Users\Yezi\Desktop\机器学习\数据集\Yale_face10080"
suffix = ".bmp"
num_people = 15
num_train = 6
num_picture_single = 11
dimension = [80, 100]
x_train = []
y_train = []
x_test = []
y_test = []
picture_file = [file for file in os.listdir(picture_path) if file.endswith(suffix)]
num_picture = len(picture_file)
for i in range(num_picture):
    picture = list(Image.open(picture_path + '\\' + picture_file[i]).getdata())
    y = [0] * num_people
    y[i // num_picture_single] = 1
    if i % num_picture_single < num_train:
        x_train.append(picture)
        y_train.append(y)
    else:
        x_test.append(picture)
        y_test.append(y)
x_train, x_test, y_train, y_test = numpy.array(x_train), numpy.array(x_test), numpy.array(y_train), numpy.array(y_test)

③将数据变为四维张量并归一化,图像数据需要转换为四维张量,维度是(样本数,图像高度,图像宽度,通道数)。此处将图像数据的通道数设置为1,表示灰度图像。然后对图像数据进行归一化处理,将像素值缩放到0到1之间。

x_train = x_train.reshape(x_train.shape[0], dimension[0], dimension[1], 1).astype('float32') / 255
x_test = x_test.reshape(x_test.shape[0], dimension[0], dimension[1], 1).astype('float32') / 255

④建了模型,采用了序贯模型(Sequential)。模型由一个卷积层、一个最大池化层、一个扁平层(用于将多维数据展平为一维)、一个全连接层(用于输出分类概率)组成。激活函数使用了 ReLU,并且最后的全连接层使用了 softmax 激活函数以获得分类概率。

model = Sequential()
model.add(Conv2D(filters=4, kernel_size=(3, 3), activation='relu', input_shape=(dimension[0], dimension[1], 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(num_people, activation='softmax'))

⑤使用交叉熵作为损失函数,Adam 作为优化器进行训练,并且监测模型的准确率。

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

⑥使用训练集对模型进行训练,指定了批次大小和训练轮数,并在训练过程中显示进度和验证集的表现。

history = model.fit(x_train, y_train, batch_size=128, epochs=20, verbose=1, validation_data=(x_test, y_test))

⑦对训练好的模型使用测试集进行验证,并打印出测试准确率。

score = model.evaluate(x_test, y_test, verbose=0)
print('Test accuracy:', score[1])

模型训练

以下是python构建的卷积神经网络在ORL、FERET和YaleFace三个人脸数据集的训练和表现情况。

  • ORL人脸数据集

ORL人脸数据集有40个人的人脸数据,每个人10张照片,一共400张照片,照片的维数是46×56。我们将每个人的前5张照片作为训练集,共200张,剩下的5张作为测试集,最后的全连接层采用40个神经元作为模型的输出,使用了64个卷积核,训练了20轮,训练过程如图1所示。

图1 ORL训练过程

训练出的人脸识别模型在测试集上的识别率随训练的轮次的变化如图2所示。

图2 ORL识别率

具体数据如表1所示。

表1 ORL

由结果可以看出,ORL数据集训练出来的模型,其拟合效果和泛化效果都比较好。

  • FERET人脸数据集

FERET人脸数据集有200个人的人脸数据,每个人7张照片,一共1400张照片,照片的维数是80×80。我们将每个人的前4张照片作为训练集,共800张,剩下的3张作为测试集,最后的全连接层采用200个神经元作为模型的输出,使用了4个卷积核,训练了20轮,训练过程如图3所示。

图3 FERET训练过程

训练出的人脸识别模型在测试集上的识别率随训练的轮次的变化如图4所示。

图4 FERET识别率

具体数据如表2所示。

表2 FERET

由结果可以知道,FERET数据集训练出来的模型,其拟合效果很好,但泛化效果并不理想,分析原因可能是因为训练的数据过少,加上FERET的噪声影响比较大,最后一张照片光线很暗,导致了测试集的识别率不高。

  • Yale Face人脸数据集

Yale Face人脸数据集有15个人的人脸数据,每个人11张照片,一共165张照片,照片的维数是80×100。我们将每个人的前6张照片作为训练集,共90张,剩下的5张作为测试集,最后的全连接层采用15个神经元作为模型的输出,使用了16个卷积核,训练了20轮,训练过程如图5所示。

图5 Yale Face训练过程

训练出的人脸识别模型在测试集上的识别率随训练的轮次的变化如图6所示。

图6 Yale Face识别率

具体数据如表3所示。

表3 Yale Face

由结果可以看出,Yale Face数据集训练出来的模型,其拟合效果和泛化效果都比较好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《C++高级编程》读书笔记(十二:利用模板编写泛型代码)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. 模板概述 模板将参数化的概念推进了一步&#xff0c;不仅允许…

用Python搭建监控平台详解

概要 监控和运维&#xff0c;是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控&#xff0c;我们能够及时了解到企业网络的运行状态。一旦出现安全隐患&#xff0c;你就可以及时预警&#xff0c;或者是以其他方式通知运维人员&#xff0c;让运维监控人员有时…

oracle 自定义类型(type)的用法

emp表数据如下所示 定义object类型 create or replace type typeof_userinfo_row as object(user_id varchar2(50),user_name varchar2(50) )创建函数并将此类型作为返回值类型 create or replace function FUN_TEST return typeof_userinfo_row isFunctionResult typeof_use…

互联网业务全球化互通组网

随着互联网业务的快速发展&#xff0c;越来越多的企业开始全球化扩张业务&#xff0c;并需要在全球范围内建立互联网组网以实现业务数据的高效传输。在这个过程中&#xff0c;如何建立高效、稳定的全球互联网组网方案&#xff0c;是每个企业都需要考虑的问题。 一种可行的方案…

springboot 上传文件

在Spring Boot中&#xff0c;可以使用RequestParam注解来接收文件。 在你的控制器方法中&#xff0c;使用RequestParam注解来声明一个MultipartFile类型的参数来接收上传的文件 MultipartFile是spring类型&#xff0c;代表HTML中form data方式上传的文件&#xff0c;包含二进制…

【C语言操作符优先级】

C语言操作符优先级 C语言操作符1、操作符的优先级序表2、操作符的属性2.1、操作符优先级运算例程12.2、操作符优先级运算例程2 C语言操作符 前言&#xff1a; &#xff08;1&#xff09;在我们熟悉的数学加减乘除运算中&#xff0c;都知道先乘除再加减&#xff0c;有括号的先算…

Error: Cannot find module ‘webpack‘ 问题解决办法

这句话的意思是&#xff1a;没有找到webpack模块。 就算之前你装了webpack&#xff0c;那肯定是非全局安装 所以要全局安装 npm install --save-dev webpack 问题解决

数据库管理-第八十六期 19c OCM之路-第一堂(01)(20230628)

数据库管理 2023-06-28 第八十六期 19c OCM之路-第一堂&#xff08;01&#xff09;1 环境补充说明2 第一堂-01考点1&#xff1a;Create a pluggable database 创建PDB考点2&#xff1a;Create tablespace 创建表空间考点3&#xff1a;Managing undo 管理undo 总结 第八十六期 1…

【无名管道】无名管道(Pipe)与进程通信:快速上手

目录 0. 管道概述&#xff1a; 1. 管道特点 2. 管道创建&#xff1a;pipe函数 3. 管道的读写特点 4. 通过fcntl函数设置文件的阻塞特性 5. 查看管道缓冲区命令 总结&#xff1a; 0. 管道概述&#xff1a; 管道也叫无名管道&#xff0c;它是是 UNIX 系统 IPC&#xff08;…

019、数据库管理之备份恢复管理(BR)

备份的重要性 数据库恢复审计和分析典型DBA任务 备份的类型 热备&#xff0c;允许应用程序完全访问数据。冷备&#xff0c;不允许应用程序访问年数据温备&#xff0c;允许应用程序读取&#xff0c;但不能修改 热备份 热备份是在读取和修改数据时进行的&#xff0c;几乎不会…

怎么高效批量调整视频的尺寸大小

大家平时在剪辑视频的过程中&#xff0c;是否会遇到视频尺寸大小不合适的情况&#xff0c;当我们遇到这种情况时&#xff0c;如何才能快速批量地解决呢&#xff1f;有没有什么方法可以快速批量修改视频尺寸大小呢&#xff1f;跟着小编一起来看看我平时批量修改视频尺寸的方法。…

联邦学习的架构思想

目录 联邦学习介绍&#xff08;非常详细&#xff09; 联邦学习的由来 联邦学习的发展历程 1) 机器学习 2) 分布式机器学习 3) 隐私保护技术 4) 联邦学习 联邦学习的规范与标准 联邦学习的架构思想 联邦学习的社区与生态 联邦学习介绍&#xff08;非常详细&#xff09…

Lenovo联想笔记本电脑 小新 Air-14 2020 Intel平台IIL版(81YJ)原装Win10系统恢复原厂OEM预装专用系统

Lenovo联想笔记本电脑&#xff0c;小新 Air-14 2020 Intel平台IIL版(81YJ)出厂Windows10系统原装系统镜像&#xff0c;恢复原厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1…

基于微信小程序的上课签到系统(数据库+报告+文档+演示视频)

系统技术语言介绍&#xff1a; 本系统采用了SSM (Spring Spring MVC Mybatis&#xff09;架构&#xff0c; MySQL作为基础数据库&#xff0c;微信开发工具作为前端基础&#xff0c;前端采用了 wxml的设计语言&#xff0c;Idea作为后台的开发工具。 功能列表&#xff1a; 1.…

从数字图像到音视频学习:我的学习之旅

数字图像是一门广泛应用于计算机视觉、图像处理和计算机图形学等领域的学科&#xff0c;而音视频学习则涵盖了音频和视频的处理、分析和应用。 如果你最开始接触数字图像&#xff0c;可能会学习一些基本概念&#xff0c;例如像素、分辨率、色彩空间和图像处理算法等。这可能涉…

java项目之药源购物网站ssm源码+文档

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的药源购物网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&#xff…

隔离变压器和浪涌保护器SPD有哪些不同作用

浪涌保护装置&#xff08;SPD&#xff09;和隔离变压器的作用经常混淆。为了保护敏感的电子设备和设备免受瞬态事件的影响&#xff0c;必须考虑各种因素。 无论瞬态来自外部还是内部&#xff0c;信号噪声、共模瞬变、差模瞬变和接地电位上升都可能导致保护不力的设备出现问题。…

vue中使用mock.js

安装mock npm install mockjs --save-dev或者在ui中选择依赖 查看安装是否成功 进入package.json文件 配置mock 在src目录下新建mock文件夹&#xff0c;在mock文件夹下建立index.js 配置模拟请求数据 index.js import Mock from mockjsconst loginData Mock.mock(http://l…

【 云原生 kubernetes 】- 单点登录Authelia + OpenLdap

文章目录 简介AutheliaOpenLdap属性介绍 Helm部署openldap配置调整数据持久化部署使用命令行Web Authelia 页面访问反向代理进行集成流程 ⚡️: OpenLDAP是轻量级目录访问协议&#xff08;LDAP&#xff09;的开源实现&#xff0c;它提供了一种存储和访问关于用户、组、计算机和…

使用Python将图片转pdf

使用Python将图片转pdf 1. 效果图2. 源码参考 今天需要把图片转pdf&#xff0c;发现迅捷pdf转换开始默认带水印了&#xff0c;收费版那算了&#x1f602;&#x1f602;&#xff0c;那就用Python吧&#xff0c;可单转&#xff0c;可批量转。 参考: https://blog.csdn.net/qq_53…