根据姓名判断性别-人工智能

本帖训练一个可以根据姓名判断性别的CNN模型;我使用自己爬取的35万中文姓名进行训练。

使用同样的数据集还可以训练起名字模型,参看:

  • TensorFlow练习7: 基于RNN生成古诗词
  • https://github.com/tensorflow/models/tree/master/namignizer
  • TensorFlow练习13: 制作一个简单的聊天机器人

准备姓名数据集

我上网找了一下,并没有找到现成的中文姓名数据集,额,看来只能自己动手了。

我写了一个简单的Python脚本,爬取了上万中文姓名,格式整理如下:

[python]  view plain  copy
  1. 姓名,性别  
  2. 安镶怡,女  
  3. 饶黎明,男  
  4. 段焙曦,男  
  5. 苗芯萌,男  
  6. 覃慧藐,女  
  7. 芦玥微,女  
  8. 苏佳琬,女  
  9. 王旎溪,女  
  10. 彭琛朗,男  
  11. 李昊,男  
  12. 利欣怡,女  
  13. # 貌似有很多名字男女通用  

数据集:https://pan.baidu.com/s/1hsHTEU4。

训练模型

[python]  view plain  copy
  1. import tensorflow as tf  
  2. import numpy as np  
  3.    
  4. name_dataset = 'name.csv'  
  5.    
  6. train_x = []  
  7. train_y = []  
  8. with open(name_dataset, 'r') as f:  
  9.     first_line = True  
  10.     for line in f:  
  11.         if first_line is True:  
  12.             first_line = False  
  13.             continue  
  14.         sample = line.strip().split(',')  
  15.         if len(sample) == 2:  
  16.             train_x.append(sample[0])  
  17.             if sample[1] == '男':  
  18.                 train_y.append([01])  # 男  
  19.             else:  
  20.                 train_y.append([10])  # 女  
  21.    
  22. max_name_length = max([len(name) for name in train_x])  
  23. print("最长名字的字符数: ", max_name_length)  
  24. max_name_length = 8  
  25.    
  26. # 数据已shuffle  
  27. #shuffle_indices = np.random.permutation(np.arange(len(train_y)))  
  28. #train_x = train_x[shuffle_indices]  
  29. #train_y = train_y[shuffle_indices]  
  30.    
  31. # 词汇表(参看聊天机器人练习)  
  32. counter = 0  
  33. vocabulary = {}  
  34. for name in train_x:  
  35.     counter += 1  
  36.     tokens = [word for word in name]  
  37.     for word in tokens:  
  38.         if word in vocabulary:  
  39.             vocabulary[word] += 1  
  40.         else:  
  41.             vocabulary[word] = 1  
  42.    
  43. vocabulary_list = [' '] + sorted(vocabulary, key=vocabulary.get, reverse=True)  
  44. print(len(vocabulary_list))  
  45.    
  46. # 字符串转为向量形式  
  47. vocab = dict([(x, y) for (y, x) in enumerate(vocabulary_list)])  
  48. train_x_vec = []  
  49. for name in train_x:  
  50.     name_vec = []  
  51.     for word in name:  
  52.         name_vec.append(vocab.get(word))  
  53.     while len(name_vec) < max_name_length:  
  54.         name_vec.append(0)  
  55.     train_x_vec.append(name_vec)  
  56.    
  57. #######################################################  
  58.    
  59. input_size = max_name_length  
  60. num_classes = 2  
  61.    
  62. batch_size = 64  
  63. num_batch = len(train_x_vec) // batch_size  
  64.    
  65. X = tf.placeholder(tf.int32, [None, input_size])  
  66. Y = tf.placeholder(tf.float32, [None, num_classes])  
  67.    
  68. dropout_keep_prob = tf.placeholder(tf.float32)  
  69.    
  70. def neural_network(vocabulary_size, embedding_size=128, num_filters=128):  
  71.     # embedding layer  
  72.     with tf.device('/cpu:0'), tf.name_scope("embedding"):  
  73.         W = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.01.0))  
  74.         embedded_chars = tf.nn.embedding_lookup(W, X)  
  75.         embedded_chars_expanded = tf.expand_dims(embedded_chars, -1)  
  76.     # convolution + maxpool layer  
  77.     filter_sizes = [3,4,5]  
  78.     pooled_outputs = []  
  79.     for i, filter_size in enumerate(filter_sizes):  
  80.         with tf.name_scope("conv-maxpool-%s" % filter_size):  
  81.             filter_shape = [filter_size, embedding_size, 1, num_filters]  
  82.             W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1))  
  83.             b = tf.Variable(tf.constant(0.1, shape=[num_filters]))  
  84.             conv = tf.nn.conv2d(embedded_chars_expanded, W, strides=[1111], padding="VALID")  
  85.             h = tf.nn.relu(tf.nn.bias_add(conv, b))  
  86.             pooled = tf.nn.max_pool(h, ksize=[1, input_size - filter_size + 111], strides=[1111], padding='VALID')  
  87.             pooled_outputs.append(pooled)  
  88.    
  89.     num_filters_total = num_filters * len(filter_sizes)  
  90.     h_pool = tf.concat(3, pooled_outputs)  
  91.     h_pool_flat = tf.reshape(h_pool, [-1, num_filters_total])  
  92.     # dropout  
  93.     with tf.name_scope("dropout"):  
  94.         h_drop = tf.nn.dropout(h_pool_flat, dropout_keep_prob)  
  95.     # output  
  96.     with tf.name_scope("output"):  
  97.         W = tf.get_variable("W", shape=[num_filters_total, num_classes], initializer=tf.contrib.layers.xavier_initializer())  
  98.         b = tf.Variable(tf.constant(0.1, shape=[num_classes]))  
  99.         output = tf.nn.xw_plus_b(h_drop, W, b)  
  100.           
  101.     return output  
  102. # 训练  
  103. def train_neural_network():  
  104.     output = neural_network(len(vocabulary_list))  
  105.    
  106.     optimizer = tf.train.AdamOptimizer(1e-3)  
  107.     loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(output, Y))  
  108.     grads_and_vars = optimizer.compute_gradients(loss)  
  109.     train_op = optimizer.apply_gradients(grads_and_vars)  
  110.    
  111.     saver = tf.train.Saver(tf.global_variables())  
  112.     with tf.Session() as sess:  
  113.         sess.run(tf.global_variables_initializer())  
  114.    
  115.         for e in range(201):  
  116.             for i in range(num_batch):  
  117.                 batch_x = train_x_vec[i*batch_size : (i+1)*batch_size]  
  118.                 batch_y = train_y[i*batch_size : (i+1)*batch_size]  
  119.                 _, loss_ = sess.run([train_op, loss], feed_dict={X:batch_x, Y:batch_y, dropout_keep_prob:0.5})  
  120.                 print(e, i, loss_)  
  121.             # 保存模型  
  122.             if e % 50 == 0:  
  123.                 saver.save(sess, "name2sex.model", global_step=e)  
  124.    
  125. train_neural_network()  
  126.    
  127. # 使用训练的模型  
  128. def detect_sex(name_list):  
  129.     x = []  
  130.     for name in name_list:  
  131.         name_vec = []  
  132.         for word in name:  
  133.             name_vec.append(vocab.get(word))  
  134.         while len(name_vec) < max_name_length:  
  135.             name_vec.append(0)  
  136.         x.append(name_vec)  
  137.    
  138.     output = neural_network(len(vocabulary_list))  
  139.    
  140.     saver = tf.train.Saver(tf.global_variables())  
  141.     with tf.Session() as sess:  
  142.         # 恢复前一次训练  
  143.         ckpt = tf.train.get_checkpoint_state('.')  
  144.         if ckpt != None:  
  145.             print(ckpt.model_checkpoint_path)  
  146.             saver.restore(sess, ckpt.model_checkpoint_path)  
  147.         else:  
  148.             print("没找到模型")  
  149.    
  150.         predictions = tf.argmax(output, 1)  
  151.         res = sess.run(predictions, {X:x, dropout_keep_prob:1.0})  
  152.    
  153.         i = 0  
  154.         for name in name_list:  
  155.             print(name, '女' if res[i] == 0 else '男')  
  156.             i += 1  
  157.    
  158. detect_sex(["白富美""高帅富""王婷婷""田野"])  

执行结果:

TensorFlow练习18: 根据姓名判断性别


本文已获原作者授权转载,附上链接: http://blog.csdn.net/u014365862/article/details/53869732

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

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

相关文章

一个很强大的人脸识别库face_recognition

官方网址&#xff1a;https://github.com/ageitgey/face_recognition 在图片中查找面孔&#xff1a; import face_recognition image face_recognition.load_image_file("your_file.jpg") face_locations face_recognition.face_locations(image) 查找和操作图片中…

人脸性别识别与表情识别代码——基于python深度学习的人脸属性识别

最近又到了毕业设计开题阶段了&#xff0c;想起当年毕业的时候因为不懂深度学习&#xff0c;做了很多功课&#xff0c;翻阅论文、Github&#xff0c;查找各类资源网站去学习&#xff0c;最后在公开资源的基础上调试了无数次&#xff0c;成功实现了基于深度学习的人脸属性识别课…

Java使用百度AI实现识别图片文字信息、身份证信息

百度AI识别API http://ai.baidu.com/docs#/OCR-API/top 这个官网里有丰富的识别示例文档、本文以识别身份证信息作为例子讲解 1、首先登录自己的 “百度智能云-管理中心” 创建应用获取app账号密码等信息 网址&#xff1a;https://console.bce.baidu.com 找到 “人工智能-文字…

Python实现AI图像识别-身份证识别

图像识别说白了就是把一张照片上面的文字进行提取&#xff0c;提供工作效率 需求分析 身份证识别主要是把一张身份证照片上面的文字信息进行提取&#xff0c;不用再使用人工去手动抄写了&#xff0c;下面给大家说的这个身份识别主要是使用pythonflask华为云OCR进行实现的。 …

QT对接百度云实现人脸注册和识别

文章目录 目录 一.UI界面设计 1.获取Access Token 二 http协议头构造 三.对接百度云人脸注册和识别 四.json数据处理 五&#xff0c;数据----->UI界面 六&#xff0c;效果 ​编辑 总结&#xff1a; 一.UI界面设计 左上lineedit是处理后的解析的json数据 下方的linee…

基于MobileNetv3实现人脸面部表情识别

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

Qt+百度AI实现人脸识别之人脸检测

文章目录 简单需求Demo运行结果百度AI人脸识别接入为什么使用百度AI接口接入步骤如何获取Access Token Qt软件开发人脸检测Qt编程步骤知识点网络编程get、put、post请求方式的区别简述POST 提交数据方式如何对图片进行BASE64编码JSON数据解析 核心代码数据上传请求反馈数据解析…

眼见不为“实”,人们更信任人工智能合成的假脸

常言道&#xff0c;耳听为虚&#xff0c;眼见为实。但是现在随着人工智能技术的发展&#xff0c;眼见可不一定为实。而造成这一结果的全都是因为深度伪造技术&#xff0c;简称深伪技术或者深度伪造。是Deep Learing&#xff08;深度学习&#xff09;和Fake&#xff08;伪造&…

LiveData数据倒灌?你真的用对了吗?源码解析

文章目录 livedata/lifecycleandroidx-lifecycle基本使用uml-关键角色关系观察者模式关键源码分析 livedata基本使用源码分析还是从observe开始livedata变化通知观察者 viewmodel源码分析 FAQlifecycle用到的设计模式lifecycle是如何监听aty生命周期的一些废弃和原因为什么废弃…

Spring Boot 优雅实现多租户架构,so easy~!

点击关注公众号&#xff0c;Java干货及时送达 国内最强微服务框架&#xff0c;没有之一&#xff01; 几乎覆盖 Spring Boot 所有操作&#xff01; 一、概述 1.什么是多租户架构&#xff1f; 多租户架构是指在一个应用中支持多个租户&#xff08;Tenant&#xff09;同时访问&…

Jenkins + Docker 一键自动化部署 Spring Boot 项目,步骤齐全,少走坑路!

点击关注公众号&#xff0c;Java干货及时送达 国内最强微服务框架&#xff0c;没有之一&#xff01; 几乎覆盖 Spring Boot 所有操作&#xff01; 本文章实现最简单全面的 Jenkinsdockerspringboot 一键自动部署项目&#xff0c;步骤齐全&#xff0c;少走坑路。 环境&#xff1…

MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!

点击关注公众号&#xff0c;Java干货及时送达 学习 Spring Cloud 微服务的正确姿势&#xff01; 用上 ChatGPT 啦&#xff0c;强的离谱&#xff01; 终于把 Spring Boot 3.0 写成书了&#xff01; 前言 在基于Mybatis的开发模式中&#xff0c;很多开发者还会选择Mybatis-Plus来…

农民工与学生为楼癫狂 富人加速撤离

首先是各级政府不约而同开始鼓励农民工进城买房。然后&#xff0c;国家信息中心宏观经济形势课题组的报告&#xff0c;甚至把这件事提高到了生死攸关的高度&#xff1a;农民工市民化&#xff0c;是消化住宅库存的关键环节和成败所在。特别想请教国家信息中心宏观经济形势课题组…

计算机成下一个土木了??

来源&#xff1a;知乎 最近互联网裁员&#xff0c;有网友热议&#xff1a;2022年大规模裁员后&#xff0c;计算机专业会不会成为下一个土木&#xff1f; 前些年抓住了互联网行业的红利期&#xff0c;进入大厂的员工&#xff0c;基本可以实现在一线城市买房扎根。 但反观现在&am…

读书笔记-大颠狂(非同寻常的大众幻想与群众性癫狂)

本书内容概要 《财富》杂志鼎力推荐的75本商务必读书之一&#xff0c;《金融时报》评选的史上最佳10部金融作品之一。本书在金融史上的地位不言自喻&#xff0c;在世界各地流传了近200年依然畅销不衰。它不单是一本金融投资领域的超级经典&#xff0c;也是一部有关人类愚行的编…

让人癫狂的24号,请你慢点离开

那一年&#xff0c;你18岁&#xff0c;初进联盟&#xff0c;受世人怀疑&#xff0c;拿下扣篮冠军  那一年&#xff0c;你19岁&#xff0c;史上ALL STAR首发&#xff0c;惊艳世人  那一年&#xff0c;你20岁&#xff0c;坐稳球队先发&#xff0c;场均19&#xff0c;成为一股…

IntelliJ IDEA 2019,从入门到癫狂,图文教程

点击上方“小哈学Java”&#xff0c;选择“星标” 回复“666”&#xff0c;领取100G独家整理的学习资料哟~ 来源&#xff1a;http://t.cn/Eiv6CTU 如果说IntelliJ IDEA是一款现代化智能开发工具的话&#xff0c;Eclipse则称得上是石器时代的东西了。 其实笔者也是一枚从Eclipse…

IntelliJ IDEA 2019从入门到癫狂 图文教程!

点击上方“方志朋”&#xff0c;选择“设为星标” 回复”666“获取新整理的面试资料 作者&#xff1a;yizhiwazi 来源&#xff1a;www.jianshu.com/p/9c65b7613c30 前言&#xff1a;IntelliJ IDEA 如果说IntelliJ IDEA是一款现代化智能开发工具的话&#xff0c;Eclipse则称得上…

新世纪的群众性幻想与癫狂3

又泡沫的地方&#xff0c;就有财富的地方 自我意淫的人造牛市 进入2015年以来&#xff0c;静默已久的A股股价就出现了一个令人意想不到的暴涨。到2015年6月中旬&#xff0c;上证综指已较2014年7月上涨了152%、较年初上涨了59.7%&#xff0c;中小企业板、创业板较年初更是上涨了…

癫狂的dom——利用css3让dom动起来

不废话&#xff0c;先来看一下效果&#xff1a; 下面上代码&#xff1a; html部分&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><link href"shake.css" …