tf18: 根据姓名判断性别

博主分享了如何利用TensorFlow构建一个能够根据姓名预测性别的CNN模型,训练数据集为自爬取的35万个中文姓名。此外,该数据集还可用于训练起名模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

准备姓名数据集

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

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

姓名,性别
安镶怡,女
饶黎明,男
段焙曦,男
苗芯萌,男
覃慧藐,女
芦玥微,女
苏佳琬,女
王旎溪,女
彭琛朗,男
李昊,男
利欣怡,女
# 貌似有很多名字男女通用

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

 

训练模型

import tensorflow as tf
import numpy as np
 
name_dataset = 'name.csv'
 
train_x = []
train_y = []
with open(name_dataset, 'r') as f:
	first_line = True
	for line in f:
		if first_line is True:
			first_line = False
		
好的,以下是一个根据姓名判断性别的基本代码,通过读取CSV文件进行训练: ```python import pandas as pd import numpy as np import tensorflow as tf from tensorflow.keras.layers.experimental import preprocessing # 读取 CSV 文件 dataframe = pd.read_csv("names.csv") dataframe = dataframe.sample(frac=1).reset_index(drop=True)# 打乱数据顺序 # 分离姓名性别 names = dataframe['name'].to_numpy() labels = dataframe['gender'].to_numpy() # 对标签进行预处理 encoder = preprocessing.StringLookup() encoder.adapt(labels) vocab = encoder.get_vocabulary() num_classes = len(vocab) labels = encoder(labels) # 对姓名进行预处理 name_encoder = preprocessing.TextVectorization() name_encoder.adapt(names) name_vocab = name_encoder.get_vocabulary() name_vocab_size = len(name_vocab) + 2 # 构建训练数据集 dataset = tf.data.Dataset.from_tensor_slices((names, labels)).batch(32) # 定义模型 inputs = tf.keras.Input(shape=(1,), dtype=tf.string) x = name_encoder(inputs) x = tf.keras.layers.Embedding(name_vocab_size, 64)(x) x = tf.keras.layers.Dropout(0.5)(x) x = tf.keras.layers.Conv1D(128, 5, activation='relu')(x) x = tf.keras.layers.GlobalMaxPooling1D()(x) x = tf.keras.layers.Dense(128, activation='relu')(x) x = tf.keras.layers.Dropout(0.5)(x) outputs = tf.keras.layers.Dense(num_classes, activation='softmax')(x) model = tf.keras.Model(inputs, outputs) # 编译模型 model.compile( optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'] ) # 开始训练模型 model.fit(dataset, epochs=10) # 保存模型 model.save('model') ``` 您可以根据需要修改代码,例如更改模型架构、优化器等等。希望这可以帮助您开始构建自己的姓名分类器!
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MachineLP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值