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

news2024/11/20 2:40:01

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

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

文章目录

    • 性别分类简介
    • 使用 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 conv
  tf.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 conv
  tf.keras.layers.Conv2D(256, (11,11),strides=(1,1), activation='relu',padding="same"),
  tf.keras.layers.BatchNormalization(),
     # 3rd conv
  tf.keras.layers.Conv2D(384, (3,3),strides=(1,1), activation='relu',padding="same"),
  tf.keras.layers.BatchNormalization(),
    # 4th conv
  tf.keras.layers.Conv2D(384, (3,3),strides=(1,1), activation='relu',padding="same"),
  tf.keras.layers.BatchNormalization(),
    # 5th Conv
  tf.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 2
  tf.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.001
    loss='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'] # 验证losss

epochs = 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 np

from 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.coloradmin.cn/o/10919.html

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

相关文章

Chapter3 Pytorch与机器学习有关函数(一)

3.1 Tensor中统计学有关的函数 3.1.1 平均值、总和 、累积 1.测试结果1 import torcha torch.rand(2, 2)print(a) print(torch.mean(a,)) print(torch.sum(a)) print(torch.prod(a)) 2.测试结果2:数组对第1维操作 import torcha torch.tensor([[1.0,2.0,3.0],[4.…

【毕业设计】酒店评价情感倾向分析系统 - python 深度学习

文章目录0 前言1 概述2 项目所需模块3 数据3.1 数据说明3.1.1 字段说明3.2 数据处理3.2.1 分词处理3.2.3 停用词处理3.2.4 样本均衡3.2.5 建立多层感知机分类模型3.2.6 训练模型3.2.7 网络检测率以及检测结果4 最后0 前言 🔥 Hi,大家好,这里…

回归模型介绍

Datawhale开源学习,机器学习课程,项目地址:https://github.com/datawhalechina/leeml-notes 首先讲机器学习中的:回归,回归Regression可以做哪些东西呢? 股票预测 输入为以往股票走势,预测未来…

HTML标签(下)

一、表格标签 1. 表格的主要作用 表格主要用于显示、展示数据。可以让数据规整、有可读性、有条理。 2. 表格的基本语法 <table><tr><td>单元格内的文字</td>...</tr>... </table><table> </table>是用于定义表格的标签 …

nodejs+vue+elementui零食食品o2o商城系统

目 录 摘 要 1 Abstract 1 1 系统概述 4 1.1 概述 4 1.2课题意义 4 1.3 主要内容 4 2 系统开发环境 5 3 需求分析 7 3.1技术可行性&#xff1a;技术背景 7 3.2经济可行性 7 3.3操作可行性&#xff1a; 8 3.4系统设计规则 8 3.5…

对pure pursuit算法的理解和改进

算法实现 purepursuit的核心其实是一个曲率半径的几何计算。 (x, y)是转换到机器人坐标系上的路径点。L是lookahead distance。r是形成的圆弧半径。D是r和x之间的差值。 根据上面的图形&#xff0c;可以发现有下面的几何关系&#xff1a; 同时通过 y2D2r2y^2 D^2 r^2 y2D2r…

java项目-第134期ssm社团管理系统-java毕业设计

java项目-第134期ssm社团管理系统-毕业设计 【源码请到资源专栏下载】 今天分享的项目是《社团管理系统》 该项目分为前台和后台。主要分成两个角色&#xff1a;普通用户、管理员角色。 普通用户登录前台&#xff0c;看到社团官网发布的一些信息。 比如&#xff1a;首页、新闻…

如何在 .NET MAUI 中加载 json 文件?

引言: 按core传统方式添加 AddJsonFile(“appsettings.json”) 在windows平台和ssr工作正常,但是在 ios 和 android 无法用这种方式,因为资源生成方式不一样. 使用内置资源方式不够灵活而且 ios 平台会提示不能复制 json 文件到目录,于是进行了几天的研究,终于能正确使用了. 资…

1-STM32之GPIO点亮LED

我们在基础部分讲了有关GPIO的方面&#xff0c;从这章开始我们进入模块的讲解&#xff0c;从最开始的LED灯到各种传感器模块进行。专栏预计25个章节。后续可能会不定时的增加。 本专栏芯片为STM32F429 对于工程的移植和新建这里不做讲解&#xff0c;对工程建立不懂得&#xff0…

Vue3 - watch 侦听器(超详细使用教程)

前言 它之所以叫侦听器呢&#xff0c;是因为它可以侦听一个或多个响应式数据源&#xff0c;并在数据源变化时调用所给的回调函数。 大白话说呢&#xff0c;就是你传给 watch 侦听器一个响应式变量&#xff0c;然后当这个变量变化时&#xff0c;自动触发一个你定义的函数&#x…

超实用Word小技巧,常用但很少有人记得住

我们在日常工作中经常使用 Word 进行办公。以下常用Word提示可以为您的工作节省时间和精力&#xff0c;让我们来看看。 技巧一&#xff1a;如何纵向复制文本我们一般水平选择文本&#xff0c;你有没有想过垂直选择文本&#xff1f;先按住【Alt】键&#xff0c;然后拖动鼠标左键…

【Python百日进阶-WEB开发】Day179 - Django案例:11短信验证码

文章目录九、短信验证码9.1 短信验证码逻辑分析9.2 容联云通讯短信平台9.2.1 容联云通讯短信平台介绍9.2.2 容联云通讯短信SDK测试9.2.2.1 美多商城meiduo_mall.apps.verifications.libs中新建yuntongxun包&#xff0c;结构如下&#xff1a;9.2.2.2 ccp_sms.py代码9.2.2.3 CCPR…

一起来庆祝属于GISer的节日GIS DAY!

01 概述 作为一名GISer的你&#xff0c;有没有想过其实我们GISer也有自己的节日&#xff1f;这个节日便是GIS DAY&#xff0c;今年的GIS DAY恰在今天&#xff08;2022年11月16日&#xff09;。究竟什么是GIS DAY&#xff1f;这里为大家介绍一下这个节日。 02 什么是GIS DAY …

vue的移动端项目打包成手机的app软件apk格式

目录 前提准备&#xff1a; 1、vue项目npm run build打包成dist文件夹 2、注册hbuilderx账号&#xff0c;获取appid 步骤 一、创建h5app空模版 二、 将打包完成生成dist文件目录复制到新建的项目里 三、检测打包的index.html是否白屏 四、 配置manifest.js应用入口页面…

作为项目经理必须具备的能力

作为项目管理者&#xff0c;每天都要应对项目中的所有问题&#xff0c;安排任务&#xff0c;还要照顾下属的情绪。管理者应该怎么做。 1、计划制定 项目经理作为项目管理者&#xff0c;需要制定计划&#xff0c;合理化分配任务。 项目经理可以使用甘特图制定项目计划&#xf…

微服务feign接口声明的3种方式使用与分析

前言 feign调用方式是微服务调用最为广泛的使用方式&#xff0c;feign接口声明位置也是比较关键的一环。目前来说&#xff0c;feign的3种接口声明方式各自存在利弊&#xff0c;并不存在最优解决方案&#xff0c;只能根据需求去选择。本文中不作详细项目搭建过程&#xff0c;但…

做3D建模的女生多吗?揭露行业比列

有&#xff0c;但是不多&#xff0c;这是常态✅ 其实就像是IT领域的男女比例一样&#xff0c;但是也不是没有。更何况现在女孩子顶半边天&#xff0c;遇到领导是女生的也不少&#xff0c;未来的情况如何也不能完全的预估。 • ❤️事业是热爱做的事&#xff0c;工作是不得不做…

索引【MySQL】

1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引&#xff0c; 并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。 1.2 作用 数据库中的表、数据、索引之间的关系&#xff0c;类似于书架上的图书、…

简洁直观解释精确率、召回率、F1 值、ROC、AUC

混淆矩阵 当我们在做二分类预测时&#xff0c;把预测情况与实际情况的所有结果两两混合&#xff0c;结果就会出现以下4种情况&#xff0c;就组成了混淆矩阵。 P&#xff08;Positive&#xff09;&#xff1a;代表正样本N&#xff08;Negative&#xff09;&#xff1a;代表负样…

在vscode中开发sass教程:sass语法

sass官网&#xff1a;Sass世界上最成熟、稳定和强大的CSS扩展语言 | Sass中文网sass&#xff1a;世界上最成熟、最稳定、最强大的专业级css扩展语言&#xff01;sass是一个css的预编译工具&#xff0c;也就是能够更优雅的书写css&#xff1b;1、sass使用说明&#xff1a; 基于…