nukimayasari's picture
Update app.py
096fed5 verified
import gradio as gr
from tensorflow.keras.models import load_model
from tensorflow.keras.metrics import MeanAbsoluteError
import tensorflow as tf
import numpy as np
# Register custom metric
tf.keras.utils.get_custom_objects().update({"mae": MeanAbsoluteError()})
# Load your trained model
model = load_model("student_performance_model.h5")
# Define prediction function
def predict_performance(Gender, AttendanceRate, StudyHoursPerWeek, PreviousGrade, ExtracurricularActivities, ParentalSupport):
# Encoding Gender (Male/Female)
Gender_Male = 1 if Gender == 'Male' else 0
Gender_Female = 1 if Gender == 'Female' else 0
# One-hot encode ParentalSupport (Low/Medium/High)
ParentalSupport_Low = 1 if ParentalSupport == 'Low' else 0
ParentalSupport_Medium = 1 if ParentalSupport == 'Medium' else 0
ParentalSupport_High = 1 if ParentalSupport == 'High' else 0
# ExtracurricularActivities is now numeric (0-3)
# No transformation needed, it's a numeric input already
# Prepare input array as a NumPy array
input_data = np.array([
[Gender_Male, Gender_Female, AttendanceRate, StudyHoursPerWeek, PreviousGrade, ExtracurricularActivities,
ParentalSupport_Low, ParentalSupport_Medium, ParentalSupport_High]
])
# Predict the student's performance
prediction = model.predict(input_data)
return prediction[0]
# Gradio interface
interface = gr.Interface(
fn=predict_performance,
inputs=[
gr.Dropdown(choices=['Male', 'Female'], label='Gender'),
gr.Number(label='Attendance Rate (%)'),
gr.Number(label='Study Hours Per Week'),
gr.Number(label='Previous Grade'),
gr.Slider(0, 3, step=1, label='Number of Extracurricular Activities'), # Updated: Numeric slider (0-3)
gr.Dropdown(choices=['Low', 'Medium', 'High'], label='Parental Support')
],
outputs="text"
)
# Launch the interface
interface.launch()