-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
73 lines (56 loc) · 1.91 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import streamlit as st
import numpy as np
import pandas as pd
from tensorflow.keras.models import load_model
st.title("Gender Prediction Based on Names: ")
def preprocess(names_df, train=True):
# Step 1: Lowercase
names_df['Name'] = names_df['Name'].str.lower()
# Step 2: Split individual characters
names_df['Name'] = [list(name) for name in names_df['Name']]
# Step 3: Pad names with spaces to make all names same length
name_length = 50
names_df['Name'] = [
(name + [' ']*name_length)[:name_length]
for name in names_df['Name']
]
# Step 4: Encode Characters to Numbers
names_df['Name'] = [
[
max(0.0, ord(char)-96.0)
for char in name
]
for name in names_df['Name']
]
if train:
# Step 5: Encode Gender to Numbers
names_df['Gender'] = [
0.0 if gender == 'F' else 1.0
for gender in names_df['Gender']
]
return names_df
#Load the model
pred_model = load_model('boyorgirl_5.h5')
# Input names
names = st.text_input("Enter The Name")
names = names.split(",")
if st.button("Get Gender"):
# Convert to dataframe
pred_df = pd.DataFrame({'Name': names})
# Preprocess
pred_df = preprocess(pred_df, train=False)
# Predictions
result = pred_model.predict(np.asarray(
pred_df['Name'].values.tolist())).squeeze(axis=1)
pred_df['Predicted Gender'] = [
'Boy' if logit > 0.5 else 'Girl' for logit in result
]
pred_df['Prediction Confidence (%)'] = [
logit if logit > 0.5 else 1.0 - logit for logit in result
]
# Format the output
pred_df['Name'] = names
pred_df['Prediction Confidence (%)'] = pred_df['Prediction Confidence (%)'].round(2)*100
pred_df.drop_duplicates(inplace=True)
st.header('Predictions: ')
st.table(pred_df)