jflo commited on
Commit
254343a
·
1 Parent(s): 1983698

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -26
app.py CHANGED
@@ -18,7 +18,7 @@ workout_label_map = {
18
  3: "HIIT"
19
  }
20
 
21
- feeling_label_map = {
22
  0: "Energized",
23
  1: "Tired",
24
  2: "Stressed",
@@ -32,7 +32,7 @@ soreness_label_map = {
32
  }
33
 
34
  class MultiHeadBERT(nn.Module):
35
- def __init__(self, num_workout_types, num_feelings, num_soreness_levels):
36
  super(MultiHeadBERT, self).__init__()
37
 
38
  # Shared BERT backbone
@@ -41,7 +41,7 @@ class MultiHeadBERT(nn.Module):
41
 
42
  # Task-specific classification heads
43
  self.workout_head = nn.Linear(hidden_size, num_workout_types)
44
- self.feeling_head = nn.Linear(hidden_size, num_feelings)
45
  self.soreness_head = nn.Linear(hidden_size, num_soreness_levels)
46
 
47
  self.dropout = nn.Dropout(0.3)
@@ -58,21 +58,21 @@ class MultiHeadBERT(nn.Module):
58
 
59
  # Each head produces its own logits
60
  workout_logits = self.workout_head(cls_output)
61
- feeling_logits = self.feeling_head(cls_output)
62
  soreness_logits = self.soreness_head(cls_output)
63
 
64
- return workout_logits, feeling_logits, soreness_logits
65
 
66
  class PredictRequest(BaseModel):
67
  user_input: str
68
 
69
  class PredictResponse(BaseModel):
70
- workout: str
71
- workout_conf: float
72
- feeling: str
73
- feeling_conf: float
74
- soreness: str
75
- soreness_conf: float
76
 
77
  @app.get("/")
78
  def greet_json():
@@ -82,8 +82,8 @@ def greet_json():
82
  def predict(request: PredictRequest):
83
 
84
  model = MultiHeadBERT(
85
- num_workout_types=4,
86
- num_feelings=4,
87
  num_soreness_levels=3
88
  )
89
 
@@ -104,34 +104,34 @@ def predict(request: PredictRequest):
104
  return_tensors='pt'
105
  )
106
 
107
- input_ids = encoding['input_ids'].to(device)
108
  attention_mask = encoding['attention_mask'].to(device)
109
 
110
  with torch.no_grad():
111
- workout_logits, feeling_logits, soreness_logits = model(input_ids, attention_mask)
112
 
113
  # Convert logits to probabilities
114
  workout_probs = torch.softmax(workout_logits, dim=1)
115
- feeling_probs = torch.softmax(feeling_logits, dim=1)
116
  soreness_probs = torch.softmax(soreness_logits, dim=1)
117
 
118
  # Get predicted class and confidence percentage for each head
119
- workout_conf, workout_pred = workout_probs.max(dim=1)
120
- feeling_conf, feeling_pred = feeling_probs.max(dim=1)
121
  soreness_conf, soreness_pred = soreness_probs.max(dim=1)
122
 
123
  # Map predictions to labels
124
- predicted_workout = workout_label_map[workout_logits.argmax().item()]
125
- predicted_feeling = feeling_label_map[feeling_logits.argmax().item()]
126
  predicted_soreness = soreness_label_map[soreness_logits.argmax().item()]
127
 
128
 
129
  return PredictResponse(
130
- workout = predicted_workout,
131
- workout_conf = round(workout_conf.item() * 100, 1),
132
- feeling = predicted_feeling,
133
- feeling_conf = round(feeling_conf.item() * 100, 1),
134
- soreness = predicted_soreness,
135
- soreness_conf = round(soreness_conf.item() * 100, 1),
136
  )
137
 
 
18
  3: "HIIT"
19
  }
20
 
21
+ mood_label_map = {
22
  0: "Energized",
23
  1: "Tired",
24
  2: "Stressed",
 
32
  }
33
 
34
  class MultiHeadBERT(nn.Module):
35
+ def __init__(self, num_workout_types, num_moods, num_soreness_levels):
36
  super(MultiHeadBERT, self).__init__()
37
 
38
  # Shared BERT backbone
 
41
 
42
  # Task-specific classification heads
43
  self.workout_head = nn.Linear(hidden_size, num_workout_types)
44
+ self.mood_head = nn.Linear(hidden_size, num_moods)
45
  self.soreness_head = nn.Linear(hidden_size, num_soreness_levels)
46
 
47
  self.dropout = nn.Dropout(0.3)
 
58
 
59
  # Each head produces its own logits
60
  workout_logits = self.workout_head(cls_output)
61
+ mood_logits = self.mood_head(cls_output)
62
  soreness_logits = self.soreness_head(cls_output)
63
 
64
+ return workout_logits, mood_logits, soreness_logits
65
 
66
  class PredictRequest(BaseModel):
67
  user_input: str
68
 
69
  class PredictResponse(BaseModel):
70
+ workout: str
71
+ workout_conf: float
72
+ mood: str
73
+ mood_conf: float
74
+ soreness: str
75
+ soreness_conf: float
76
 
77
  @app.get("/")
78
  def greet_json():
 
82
  def predict(request: PredictRequest):
83
 
84
  model = MultiHeadBERT(
85
+ num_workout_types=8,
86
+ num_moods=5,
87
  num_soreness_levels=3
88
  )
89
 
 
104
  return_tensors='pt'
105
  )
106
 
107
+ input_ids = encoding['input_ids'].to(device)
108
  attention_mask = encoding['attention_mask'].to(device)
109
 
110
  with torch.no_grad():
111
+ workout_logits, mood_logits, soreness_logits = model(input_ids, attention_mask)
112
 
113
  # Convert logits to probabilities
114
  workout_probs = torch.softmax(workout_logits, dim=1)
115
+ mood_probs = torch.softmax(mood_logits, dim=1)
116
  soreness_probs = torch.softmax(soreness_logits, dim=1)
117
 
118
  # Get predicted class and confidence percentage for each head
119
+ workout_conf, workout_pred = workout_probs.max(dim=1)
120
+ mood_conf, mood_pred = mood_probs.max(dim=1)
121
  soreness_conf, soreness_pred = soreness_probs.max(dim=1)
122
 
123
  # Map predictions to labels
124
+ predicted_workout = workout_label_map[workout_logits.argmax().item()]
125
+ predicted_mood = mood_label_map[mood_logits.argmax().item()]
126
  predicted_soreness = soreness_label_map[soreness_logits.argmax().item()]
127
 
128
 
129
  return PredictResponse(
130
+ workout = predicted_workout,
131
+ workout_conf = round(workout_conf.item() * 100, 1),
132
+ mood = predicted_mood,
133
+ mood_conf = round(mood_conf.item() * 100, 1),
134
+ soreness = predicted_soreness,
135
+ soreness_conf = round(soreness_conf.item() * 100, 1),
136
  )
137