深度学习项目:男女性别识别【附完整源码】

news/2024/5/7 17:28:19/文章来源:https://blog.csdn.net/weixin_46211269/article/details/127892932

性别分类对于人机交互应用和计算机辅助生理或心理分析等商业领域的许多应用至关重要,因为它包含有关男女特征差异的广泛信息。

本次案例收集了接近二十万的男女数据集图片。
在这里插入图片描述
在这里插入图片描述

文章目录

    • 性别分类简介
    • 使用 Python 进行性别分类的机器学习项目
      • 导入相关库和数据
      • 模型搭建和训练
      • 模型测试
      • 预测

性别分类简介

性别分类越来越受到关注,因为性别包含有关男性和女性社会活动的丰富而独特的信息。性别分类旨在根据区分男性气质和女性气质的特征来识别一个人的性别。

在人工智能领域,性别分类被认为是模式识别方法最重要的应用之一。性别分类研究的进展带来了许多潜在的应用。

例如,具有性别识别功能的计算机系统在基础和应用研究领域有着广泛的应用,包括人机交互、安全工业和监控、人口统计研究、商业开发、移动应用和视频游戏。

此外,还提出了多种机制来提高性别识别在准确性和效率方面的表现。

使用 Python 进行性别分类的机器学习项目

导入相关库和数据

import os
from tensorflow.keras import layers
from tensorflow.keras import Model
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import tensorflow as tf

现在让我们读取并导入我们将用于训练神经网络模型的图像数据集:

# ImageDataGenerator 函数
# (1)图片生成器,负责生成一个批次一个批次的图片,以生成器的形式给模型训练;
# (2)对每一个批次的训练图片,适时地进行数据增强处理(data augmentation);# 训练
train_datagen = ImageDataGenerator(rescale = 1./255,  # 设置放缩因子为1/255,把像素值放缩到01之间有利于模型的收敛,避免神经元“死亡”rotation_range=40,   #旋转范围width_shift_range=0.2, #水平平移范围height_shift_range=0.2,  #垂直平移范围shear_range=0.2, #  透视变换的范围zoom_range=0.2, #缩放范围,参数大于0小于1时,执行的是放大操作,当参数大于1时,执行的是缩小操作。horizontal_flip=True,  #水平不反转fill_mode='nearest') #填充模式test_datagen = ImageDataGenerator( rescale = 1.0/255)# flow_from_directory()从路径生成增强数据,和flow方法相比最大的优点在于不用一次将所有的数据读入内存当中,这样减小内存压力,
# 这样不会发生OOM,血的教训
train_generator = train_datagen.flow_from_directory("Dataset/Train/",batch_size =256 ,class_mode = 'binary', target_size = (64, 64))     
# 验证数据集
validation_generator =  test_datagen.flow_from_directory( "Dataset/Validation/",batch_size  = 256,class_mode  = 'binary', target_size = (64, 64))

如下:

Found 160000 images belonging to 2 classes.
Found 22598 images belonging to 2 classes.

模型搭建和训练

现在我们需要使用 Python 训练和编译用于性别分类任务的神经网络模型:

from tensorflow.keras.optimizers import Adam # 优化器adam
# Sequential()方法是一个容器,描述了神经网络的网络结构,在Sequential()的输入参数中描述从输入层到输出层的网络结构
# Sequential([网络结构]) '''
tf.keras.layers.Conv2D卷积层
tf.keras.layers.Conv2D(filter = 卷积核个数,kernel_size = 卷积核尺寸, strides = 卷积步长, activation = "激活函数“,padding = ”valid“ or "same")
'''
model = tf.keras.models.Sequential([# 1st convtf.keras.layers.Conv2D(96, (11,11),strides=(4,4), activation='relu', input_shape=(64, 64, 3)),# BatchNormalization是BN算法tf.keras.layers.BatchNormalization(),# 用于2D输入的最大池化层(例如图像).tf.keras.layers.MaxPooling2D(2, strides=(2,2)),# 2nd convtf.keras.layers.Conv2D(256, (11,11),strides=(1,1), activation='relu',padding="same"),tf.keras.layers.BatchNormalization(),# 3rd convtf.keras.layers.Conv2D(384, (3,3),strides=(1,1), activation='relu',padding="same"),tf.keras.layers.BatchNormalization(),# 4th convtf.keras.layers.Conv2D(384, (3,3),strides=(1,1), activation='relu',padding="same"),tf.keras.layers.BatchNormalization(),# 5th Convtf.keras.layers.Conv2D(256, (3, 3), strides=(1, 1), activation='relu',padding="same"),# 批量标准化层应用了一种转换,使得数据的均值趋于0,标准差趋于1。tf.keras.layers.BatchNormalization(),tf.keras.layers.MaxPooling2D(2, strides=(2, 2)),# To Flatten layer# 使输入展平,不会影响批处理的大小tf.keras.layers.Flatten(),# To FC layer 1# 设置4096 神经元tf.keras.layers.Dense(4096, activation='relu'),# 防止过拟合tf.keras.layers.Dropout(0.5),#To FC layer 2tf.keras.layers.Dense(4096, activation='relu'),tf.keras.layers.Dropout(0.5),tf.keras.layers.Dense(1, activation='sigmoid')])
# 模型编译,配置训练方法
model.compile(optimizer=Adam(lr=0.001),  # 使用Adam优化器,学习率为0.001loss='binary_crossentropy', #配置损失函数metrics=['accuracy']  #标注网络评价指标)
# 模型训练
hist = model.fit_generator(generator=train_generator,  # 训练数据生成器validation_data=validation_generator,  # 验证数据生成器steps_per_epoch=256,   # validation_steps=256,epochs=50) #迭代次数epochs为50

模型测试

在测试这个模型之前,让我们先看看模型在准确性方面的表现:

import matplotlib.pyplot as plt
acc = hist.history['accuracy'] # acc
val_acc = hist.history['val_accuracy'] #  验证acc
loss = hist.history['loss'] # loss
val_loss = hist.history['val_loss'] # 验证losssepochs = range(len(acc))plt.plot(epochs, acc, 'r', label='Training accuracy') # 每一次迭代训练准确度
plt.plot(epochs, val_acc, 'b', label='Validation accuracy') # # 每一次迭代验证准确度
plt.title('Training and validation accuracy') # 训练和验证准度度
plt.legend(loc=0)
plt.figure()
plt.show()

如下:
在这里插入图片描述

预测

import numpy as npfrom keras.preprocessing import image
path = "Dataset/Test/Female/160001.jpg"  # 读取一张图片来测试
img = image.load_img(path, target_size=(64, 64)) # 加载
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)images = np.vstack([x])
classes = model.predict(images, batch_size=1) # 预测
print(classes[0])
if classes[0]>0.5:print("is a man")
else:print( " is a female")
plt.imshow(img)

如下:

[0.]is a female

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

<SQL编程工具MySQL、SQLyog安装及环境配置教程>——《SQL》

目录 1.MySQL安装: 1.1 MySQL下载安装: 1.2 MySQL环境变量配置: 2.SQLyog安装: 2.1 SQLyog下载安装: 3.写在最后的话: 后记:●由于作者水平有限,文章难免存在谬误之处&…

winform语言切换C#设计笔记(八)

一、修改当前区域性 string languageName“zh-CN”; Thread.CurrentThread.CurrentUICulture new CultureInfo(languageName); 二、定义语言切换类Mullanguage或方法如下&#xff1a; private static Dictionary<string, ResourceManager> ResManagerDic new Dictionar…

一文讲解如何学习 Linux 内核网络协议栈

协议栈的细节 下面将介绍一些内核网络协议栈中常常涉及到的概念。 sk_buff 内核显然需要一个数据结构来表示报文&#xff0c;这个结构就是 sk_buff ( socket buffer 的简称)&#xff0c;它等同于在<TCP/IP详解 卷2>中描述的 BSD 内核中的 mbuf。 sk_buff 结构自身并不…

【论文解读】Attentional Feature Fusion

【论文解读】Attentional Feature Fusion一、研究背景二、Multi-scale Channel Attention Module &#xff08;MS-CAM&#xff09;三、Attentional Feature Fusion&#xff08;AFF&#xff09;四、Iterative Attentional Feature Fusion&#xff08;IAFF&#xff09;五、实例&a…

[附源码]java毕业设计价格公示系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Ajax进阶】跨域和JSONP的学习

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录了解同源策略和跨域  同源策略    什么是同源    什么是同源策略跨域    什么是…

调优工具常用命令

语法格式 mysqldumpslow [ OPTS... ] [ LOGS... ] //命令行格式常用到的格式组合 -s 表示按照何种方式排序c 访问次数l 锁定时间r 返回记录t 查询时间al 平均锁定时间ar 平均返回记录数at 平均查询时间 -t 返回前面多少条数据 -g 后边搭配一个正则匹配模式&#xff0c;大小写…

Opencv——直方图、掩膜、直方图均衡化详细介绍及代码实现

一、图像直方图 1.1 定义&#xff1a; 图像直方图是图像的基本属性之一&#xff0c;也是反映图像像素数据分布的统计学特征&#xff0c;其横坐标代表了图像像素点在[0,255]范围中&#xff0c;纵坐标代表图像像素点出现的个数或百分比。如图&#xff1a; 1.2 函数&#xff1a;…

2023年前端开发趋势未来可期

☆ 对于很多质疑&#xff0c;很多不解&#xff0c;本文将从 △ 目前企业内前端开发职业的占比&#xff1b; △ 目前业内开发语言的受欢迎程度&#xff1b; △ 近期社区问答活跃度&#xff1b; 等维度来说明目前前端这个职业的所处位置。 ☆ 还有强硬的干货&#xff0c;通过深入…

多层串联拼接网络

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

什么是JUC

什么是JUC JUC指的是&#xff1a;Java里的三个包 java.util.concurrentjava.util.concurrent.atomic&#xff1a;原子性java.util.concurrent.locks&#xff1a;lock锁回顾线程和进程 进程 程序执行的一次过程&#xff0c;一个进程包含一个或多个线程。进程是资源分配的单位 …

UE4 回合游戏项目 17- 进入指定区域触发战斗事件

在上一节&#xff08;UE4 回合游戏项目 16- 控制玩家&#xff09;基础上&#xff0c;增加角色走进指定区域从而触发战斗场景的功能 主要思想是添加一个碰撞区域&#xff0c;当玩家与该区域碰撞时&#xff0c;触发战斗事件 效果&#xff1a; 步骤&#xff1a; 1.新建蓝图类 选…

Allegro给各种形式的板框导弧操作指导

Allegro给各种形式的板框导弧操作指导 Allegro可以给板框导弧,让加工出来的板框更加圆滑,具体操作步骤如下 板框是line形式的 选择Manufacture-Drafting-Fillet命令 在Options里面Radius输出导弧的半径,比如78.74 框选两个线段的部分 完成后的效果如下图 框选4个角落,…

PCB Layout爬电距离、电气间隙如何确定-安规

PCB Layout爬电距离、电气间隙如何确定 爬电距离&#xff1a;沿绝缘表面测得的两个导电零部件之间或导电零部件与设备防护界面之间的最短路径。 电气间隙&#xff1a;在两个导电零部件之间或导电零部件与设备防护界面之间测得的最短空间距离。即在保证电气性能稳定和安全的情况…

用python就获取到照片拍摄时的详细位置【源码公开】

文章目录一.引言1.读取照片信息&#xff0c;获取坐标2.通过baidu Map的API将GPS信息转换成地址。二.源码附上&#xff01;&#xff01;&#xff01;注意事项一.引言 先看获取到的效果 拍摄时间&#xff1a;2021:12:18 16:22:13 照片拍摄地址:(内蒙古自治区包头市昆都仑区, 内…

广和通5G AIoT模组引领亮相2022国际物联网展(IOTE),智赋行业数字化新价值

11月15-17日&#xff0c;2022国际物联网展&#xff08;IOTE&#xff09;于深圳盛大启幕&#xff0c;本届展会汇聚众多物联网行业大咖&#xff0c;共同展示并探讨物联网产业链的创新实践与成果。广和通以“5GAIoT深度融合&#xff0c;创新智造未来”为主题亮相现场。本次广和通展…

2.10.2版本的青龙升级2.10.13及2.11.3版本的教程

重要提醒&#xff1a; 这个教程仅限使用我下面这个命令搭建的青龙面板使用 docker run -dit \--name QL \--hostname QL \--restart always \-p 5700:5700 \-v $PWD/QL/config:/ql/config \-v $PWD/QL/log:/ql/log \-v $PWD/QL/db:/ql/db \-v $PWD/QL/scripts:/ql/scripts \-…

HTML知识点总结篇(一)

src和href的区别 作用结果不同 src用于替换当前内容href用于在引用资源和当前文档之间建立链接 请求资源类型不同 在请求src资源时&#xff0c;会将其指向的资源下载并应用到文档中。常用于img/iframe/input/style/scripthref常用于建立当前元素和文档之间的链接。常用的有lin…

【EC200U】GPS定位

EC200U GPS定位GNSS模块quecgnss - 内置GNSSGNSS 功能初始化GNSS 工作状态获取GNSS开关GNSS定位数据获取实测案例拓展当前互联网地图的坐标系现状地球坐标 (WGS84)火星坐标 (GCJ-02)也叫国测局坐标系百度坐标 (BD-09)coordtransform 坐标转换EC系列东西很多&#xff0c;网上资料…

高精度算法【加减乘除】

全文目录&#x1f60d; 前言&#x1f600; 高精度加法&#x1f914; 操作步骤&#x1f635;‍&#x1f4ab; 代码模板&#x1f600;高精度减法&#x1f914;操作步骤&#x1f635;‍&#x1f4ab; 代码模板&#x1f600;高精度乘法&#x1f914;操作步骤&#x1f635;‍&#x…