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

本次案例收集了接近二十万的男女数据集图片。

文章目录

  • 性别分类简介
  • 使用 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,把像素值放缩到0和1之间有利于模型的收敛,避免神经元“死亡”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

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

  1. 基于深度学习的自动车牌识别(详细步骤+源码)

    点击下方卡片,关注" OpenCV与AI深度学习"公众号! 视觉/图像重磅干货,第一时间送达! 来源 | Learn OpenCV 作者 | Sanyam 翻译 | OpenCV与 ...

  2. springboot+dubbo+redis+RabbitMQ 项目整合实例【附完整源码】

    往期精选 ●  卸磨杀驴!程序员心中的悲愤与无奈 ●  2018.06.27阿里云宕机50分钟 ●  程序员/架构师/技术经理/技术总监是干什么的 ●  记一次内存溢的出分析经历--带给我的痛苦 ●  ...

  3. 基于深度学习的人脸性别识别系统(含UI界面,Python代码)

    摘要:人脸性别识别是人脸识别领域的一个热门方向,本文详细介绍基于深度学习的人脸性别识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择人脸图片.视频进行检 ...

  4. android 静态图片自动切换,Android静态图片人脸识别的完整demo(附完整源码)

    Android静态图片人脸识别的完整demo(附完整源码) 来源:互联网 作者:佚名 时间:2015-03-24 20:07 本文介绍了android静态识别人脸并进行标记人眼位置及人脸框的完整dem ...

  5. 视频教程-物联网之java实现(springboot + netty + 心跳,附完整源码)-Java

    物联网之java实现(springboot + netty + 心跳,附完整源码) 10年的软件行业从业经验,熟悉java开发.java 架构.微服务.自动化高级运维.压力测试等. 林忠明 ¥200. ...

  6. 知识图谱实战案例完全剖析(附完整源码和数据集)-张子良-专题视频课程

    知识图谱实战案例完全剖析(附完整源码和数据集)-2070人已学习 课程介绍         课程定位:系统学习知识图谱的佳实践: 系统学习:完全覆盖知识建模.图数据库.知识应用和知识获取: 实战指引: ...

  7. 微信小程序之授权登录(附完整源码)

    个人博客上已经同步更新了文章,有目录索引,阅读起来比较方便,欢迎大家移步个人博客上读阅~ 个人博客地址:http://zwd596257180.gitee.io/blog/2019/04/15/wec ...

  8. 聊天机器人mysql数据_自己动手开发智能聊天机器人完全指南(附完整源码)

    一.前言 本文是<自己动手开发智能聊天机器人完全指南(附完整源码)>的第二篇,也是21天实战人工智能系列<知识图谱完全项目案例剖析>里面的知识图谱应用的案例.前文中实现了一个最 ...

  9. H5 直播的疯狂点赞动画如何通过php直播平台源码实现(附完整源码)

    php直播平台源码H5 直播的疯狂点赞动画如何通过php直播平台源码实现(附完整源码) 直播有一个很重要的互动:点赞. 为了烘托直播间的氛围,直播相对于普通视频或者文本内容,点赞通常有两个特殊需求: ...

  10. Python实现恩尼格玛加密算法——附完整源码

    Python实现恩尼格玛加密算法--附完整源码 恩尼格玛是第二次世界大战中德国所使用的复杂电机械式密码机.它被认为是世界上最复杂的加密设备之一.在这个项目中,我们将使用Python模拟实现恩尼格玛加密 ...

最新文章

  1. 实验4  数据的安全性管理
  2. down 网卡端口周期性的up_Linux 中如何启用和禁用网卡?
  3. 驱动利器:数据驱动下的产品决策(上)
  4. 接入腾讯云短信服务(史上最详细+该短信服务如何申请成功+发送短信验证码API讲解+相关错误分析)
  5. Smaug Coverage
  6. Android清理设备内存具体完整演示样例(二)
  7. Alpha冲刺 - (6/10)
  8. Pr:音频和视频的同步
  9. JS 验证身份证及获取地区
  10. 【Javaweb 1】带你搞懂request,respond,servlet
  11. 常见物联网无线组网方式
  12. 智能马桶盖松下好还是TOTO好?“资深”用户的对比贴来了
  13. lavavel 环境配置 summer版
  14. ArcGIS教程:最小值和最大值条形图
  15. 论文阅读笔记:A Scalable Exemplar-based Subspace ClusteringAlgorithm for Class-Imbalanced Data
  16. c语言程序填空改错题,C语言模拟改错填空编程题.doc
  17. php截取视频第一帧为图片,把视频变成一帧一帧的图片(ae怎么把视频变成单帧) 视频截图视频画面每帧图片截取...
  18. 华为NE40路由器手册
  19. 鹬蚌相争的困局(博弈论的诡计)
  20. 预测本次出差顺利否?

热门文章

  1. python实验总结与分析_Python实验报告七
  2. 链塔智库联合清华发布《2018区块链技术应用白皮书》
  3. ISA 95企业和控制系统集成的框架和分层
  4. Azure NSG Flow Log 引发的自嗨 -- 事件驱动的日志注入
  5. 【图像处理】初识计算机视觉
  6. YOLOV4-模型集成-pytorch
  7. windows10和linux流畅,《古墓丽影10:崛起》Linux平台与Windows平台流畅度对比
  8. 【面试被虐】如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?
  9. Css3中-moz、-ms、-webkit的使用
  10. 字数统计,一个英文字母算一个字,一个汉字算一个字,一个符号算一个字