keras实现性别预测

前言

keras是经过封装后的tensorflow框架,整体使用方便快捷很多。在寇亚飞大神的悉心教导下,我用keras框架实现了体检单上的性别预测。同样,这篇文章将代码分成数据读取、网络模型定义和数据预测三个部分。

数据读取

1
2
3
4
5
6
7
8
9
10
11
12
13
# 通过pandas工具读取csv数据文件
data = pd.read_csv('train.csv').values
x_train = data[:,3:]
y1_train = data[:,1:2]
# 这里同样需要是性别数据转成int类型
for x in range(len(y1_train)):
if y1_train[x] == '\xc4\xd0':
y1_train[x] = 1
else:
y1_train[x] = 0
y1_train = y1_train.astype('int32')
# 将性别数据再转成二分类类型
y1_train = np_utils.to_categorical(y1_train,2)

网络模型定义

简单地将网络定义层2个全连接层和1个输出层。优化方法采用Adam方法,这是一种优化后的SGD方法。激发函数使用tanh,将数值归并到-1和1之间。

1
2
3
4
5
6
7
8
9
10
11
12
13
model = Sequential()
model.add(Dense(300,input_shape = (26,)))
model.add(Activation('tanh'))
model.add(Dense(300))
model.add(Activation('tanh'))
model.add(Dense(2))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer=Adam(),
metrics=['accuracy'])

训练、保存及预测

将性别预测封装成函数,读取之前训练过的数据模型,对新的数据进行预测。

1
2
3
4
5
6
7
8
9
10
11
12
13
model.fit(x_train,y1_train,batch_size=100,nb_epoch=50,verbose =1,shuffle=True)
model.save('gender.h5')
def predict_sex():
FILE_PATH1 = 'gender.h5'
if os.path.exists(FILE_PATH1):
model1 = load_model(FILE_PATH1)
else:
train()
model1 = load_model(FILE_PATH1)
result1 = model1.predict_classes(data,batch_size = 1,verbose =0)
return result1[0]

结果

最终预测的结果能达到73%左右。